php开源嘛
首页 | English | MySql数据库 | Php编程 | 建站杂烩 | 系统服务器 | 资源共享 | 专题 | 才桀网 | 支持论坛
  当前位置:主页>资源共享>站长学院>文章内容
php中的几个require()函数介绍
来源:网络搜索 作者:本站整理 发布时间:2007-05-26  

require(),include(),require_once()和include_once()的异同

require()和include()有许多相似之处,也有些不同。理解它们的不同点非常重要,否则很容易犯错误。

我把这两个语句放在一起介绍,读者可以比较学习。


1.require()语句
     require()语句用于指定的文件代替语句本身,就象C语言中的include()语句一样。如果php配置文件php.ini中的URL fopen wrappers 是打开的(默认情况下是打开的),就可以使用URL来指定文件的位置从而实现远程文件的调用。

     有一点就是使用require()和include()语句时要特别的注意。那就是在被包含的文件中,处理器是按照html模式来解释其中的内容的,处理完被包含的内容后又恢复到php模式。所以如果需要在被包含文件中使用php语法,就要使用正确的php开始和结束标记来把这些语句包含进去。
     require()和include()知识php中的一种语言特性,而不是函数。它们和函数有许多不同的地方。

比如:require()所包含的文件中不能包含控制结构,而且不能使用return这样的语句。在require()所包含的文件中使用return语句会产生处理错误。
     不象include()语句,require()语句会无条件地读取它所包含的文件的内容,而不管这些语句是否执行。所以如果你想按照不同的条件包含不同的文件,就必须使用include()语句。当然,如果require()所在位置的语句不被执行,require()所包含的文件中的语句也不会被执行。

     require()不能在循环体中根据条件的不同而包含不同的文件。require()语句只会在第一次执行时调用它所包含的文件中的内容替换本身这条语句,当再次被执行时只能执行第一次所包含的语句。但是include()语句可以在循环体中来包含不同的文件。

     require()语句中的变量继承require()语句所在位置的变量作用域。所有在require()语句的位置可以访问的变量,在require()语句所包含的文件中都可以访问。如果require()语句位于一个函数内部,那么被包含文件内的语句都相当于定义在函数内部。

     require()语句在PHP程序执行前就会将使用require引用的文件读入,因此require通常放到程序的开始处。因此要特别注意一点,require语句有一点强,不管程序是否真的需要引用的文件,只要你使用require语句,它都会把他们包含进来!即使你是在条件控制语句中使用这个函数进行包含,那怕是那个条件不为真,引用文件也会被包含进来!形成了僵尸,在运行过程中这些僵尸是不起任何可见作用的,但是很明显它会加重负担,所以这一点要特别注意!如果使用require语句发生了包含错误,那么程序将输出出错信息并停止运行!!

     如果require()语句通过声明文件的URL来包含远程文件,而且远程服务器按照php代码来解释该文件的话,本地php文件中所包含的内容是在远程服务器上处理以后的结果。例如:
     /*
        这个例子假设some_server服务器可以解释.php文件,而不对.txt文件进行解释。在远程文件中  
     需要变量$varfirst和$varsecond
     */
    /*不能正确执行,远程服务器不处理.txt文件*/
    require("http://some_server/file.txt?varfirst=1&varsecond=2");
   
    /*不正确,这样只能在本地机上寻找file.php文件*/
    require("file.php?varfirst=1&varsecond=2");

    /*正确的语句*/
    require("http://some_server/file.php?varfirst=1&varsecond=2");
   
    $varfirst=1;
    $varsecond=2;
    require("file.txt"); /*正确的语句*/
    require("file.php"); /*正确的语句*/
     本来在php3.0中,require()所包含的文件可以使用return语句,但条件是return语句不能出现在{}内部,而必须出现在被包含文件的全局范围内。在php4.0中已经取消了require()的这个功能,但是仍然可以使用include()来实现。

2.include()语句
     include()语句和require()语句有许多相同的地方。凡是在上边require()语句中没有明确说明不能适用于include()的部分外,require()语句的功能完全适用于include()语句。下边介绍require()语句所没有的include()语句的功能和特点。
     include语句只有在被执行时才会读入要包含的文件。在错误处理方便,使用include语句,如果发生包含错误,程序将跳过include语句,虽然会显示错误信息但是程序还是会继续执行!
      php处理器会在每次遇到include()语句时,对它进行重新处理,所以可以根据不同情况的,在条件控制语句和循环语句中使用include()来包含不同的文件。
      例如:
    <?php
        $files=array('first.php','second.php','third.php');
        for($i=0;$i<count($files);$i++)
        {
            include $files[$i];
        }
    ?>
      在php3.0和php4.0中include()语句所包含的文件中都可以使用return语句来返回一个值,并停止执行被包含文件下面的内容。但php3.0和php4.0在处理这样的情况时有所不同。在php3.0中return语句不能包含在{}内,除非它在一个函数中,因为这时它表示函数的返回值而不是文件的返回值。而在php4.0中就没有了这样的限制,用户甚至可以在文件中返回一个数字,就象函数的返回值一样。这样的语句在

php3.0中通常会报告错误。以下举例说明:
      假设被包含的文件为test.inc和主文件main.php位于一个目录中。test.inc的内容如下:
test.inc
<?php
    echo "Before the return<br>\n";
    if(1)
    {
        return 27;
    }
    echo "After the return<br>\n";
?>

假设在main.php文件中包含下面的语句:
<?php
    $retval=include('test.inc');
    echo "File returned:'$retval'<br>\n";
?>
     php3.0解释器会在第二行报告错误,而不能得到include()语句的返回值。但在php4.0中会得到下面的结果:
    Before the return
    File returned: '27'
    下边假设main.php改为:
<?php
    include('test.inc');
    echo "Back in main.html<br>\n";
?>
    在php4.0中的输出结果是:
    Before the return
    Back in main.html
   
   在php5.0中的输出结果也是:
    Before the return
    Back in main.html

    在php3.0中的输出结果是:
    Before the return
    27Back in main.html
  
    Parse error:parse error in /apache/htdocs/phptest/main.html on line 5
   
    出现上面的错误是因为return语句位于{}内部而且不是一个函数内部。如果把{}去掉,使它位于test.inc的最外层,输出结果是:
    Before the return
    27Back in main.html
    之所以出现27,是因为在php3.0中不支持include()返回。


(阅读次数:
上一篇:表格对决CSS--一场生死之战   下一篇:用PHP构建一个简易监视引擎
[收藏] [推荐] [评论(0条)] [返回顶部] [打印本页] [关闭窗口]  
用户名: 新注册) 密码: 匿名评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
 §最新评论
  热点文章
·win中PHP5和Apache的安装与配置
·实现网站的无限分类:PHP进阶教
·用PHP实现Ftp用户的在线管理
·教你如何优化MySQL数据库性能
·如何使用PHP创建RSS阅读器
·怎样建站,新手建站经验谈……
·用PHP制作登录页面程序
·PHP编程:实现QQ在线状态{教程}
·PHP开发入门教程之面向对象{学习
·JS实现禁止查看网页源代码方法总
·利用PHP和CSS改变网页文字大小
·简单的PHP&MYSQL留言板教程
  相关文章
·教你如何优化MySQL数据库性能
·怎样建站,新手建站经验谈……
·简单的PHP&MYSQL留言板教程
·PHP5在Apache下的两种模式的安装
·win中PHP5和Apache的安装与配置
·如何使用PHP创建RSS阅读器
·用PHP实现Ftp用户的在线管理
·利用PHP和CSS改变网页文字大小
·怎么在IIS6中最佳配置PHP方法
·教您如何安全的应用 MySQL
·用PHP制作登录页面程序
·实现网站的无限分类:PHP进阶教

关于我们 | 本站声明 | 友情连接 | 诚邀加盟 | 网站地图
版权Power by DedeCms   技术支持QQ =>> 罗江游鱼   Jacking  后台登陆
Copyright @ 2007 公司地址:柳州市东环路268号 邮编:545006 电话:15920389818 桂ICP备07006725号