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()返回。

3.require_once()和include_once()语句
    require_once()和include_once()语句分别对应于require()和include()语句。require_once()和include_once()语句主要用于需要包含多个文件时,可以有效地避免把同一段代码包含进去而出现函数或变量重复定义的错误。例如:如果创建两个文件util.inc和fool.inc,程序代码分别为:
   util.inc:
    <?php
       define(PHPVERSION,floor(phpversion()));
       echo "GLOBALS ARE NICE<br>/n";
       function goodTea()
       {
           return "Olong tea tasts good!";
       }
   ?>
    和fool.inc:
   <?php
       require ("util.inc");
       function showVar($var)
       {
           if(PHPVERSION==4)
           {
               print_r($var);
           }
           else
           {
               var_dump($var);
           }
       }
   ?>
    然后在error_require.php中包含这两个文件:
    <?php
        require("fool.inc");
        require("util.inc");//此句会产生一个错误
        $foo=array("1",array("complex","quaternion"));
        echo "this is requiring util.inc again which is also<br>/n";
        echo "required in fool.inc/n";
        echo "Running goodTea:".goodTea()."<br>/n";
        echo "Printing foo:<br>/n";
        showVar($foo);
    ?>
     当运行error_require.php时,输出结果如下:
     GLOBALS ARE NICE
     GLOBALS ARE NICE

Fatal error:Cannot redeclare goodTea() in util.inc on line 4
    
    如果使用require_once()语句来代替 require()语句,就不会出现上面的错误。我们把error_require.php和fool.inc中的require()语句改为require_once()语句并重命名为error_require_once.php,这是显示结果如下:
    GLOBALS ARE NICE
    this is requiring util.inc again which is also
    required in fool.inc Running goodTea:Olong tea tastes good!
    Printing foo:
    Array([0] => 1 [1] => Array ([0] => complex [1] = quaternion))
  
    include_once()语句的语法和include()语句类似,主要区别也是避免多次包含一个文件而引起函数或变量的重复定义。

require_once语句有一个引用链,它可以保证文件加入你的程序仅仅只有一次,而且会避开变量值和函数名之间的冲突。
  
    和require_once语句一样,include_once语句把include的功能扩展了。在程序执行期间,将指定的文件包含进来,如果从文件引用进来的程序先前已经包含过的时候,include_once()就不会把它再包含进来。也就是仅仅可以引用同一个文件一次!

include_once() 语句在脚本执行期间包含并运行指定文件。此行为和 include() 语句类似,唯一区别是如果该文件中的代码已经被包含了,则不会再次包含。如同此语句名字暗示的那样,只会包含一次。

include_once() 应该用于在脚本执行期间同一个文件有可能被包含超过一次的情况下,想确保它只被包含一次以避免函数重定义,变量重新赋值等问题。

使用 require_once() 和 include_once() 的更多例子见最新的 PHP 源程序发行包中的 PEAR 代码。

返回值和 include() 相同。如果文件已被包含,本函数返回 TRUE。

注: include_once() 是 PHP 4.0.1pl2 中新加入的。

注: 要注意 include_once() 和 require_once() 在大小写不敏感的操作系统中(例如 Windows)的行为

可能不是所期望的。
例子:  include_once() 在 Windows 下不区分大小写

<?php
include_once("a.php"); // this will include a.php
include_once("A.php"); // this will include a.php again on Windows! (PHP 4 only)
?>

此行为在 PHP 5 中改了,路径先被规格化,因此 C:/PROGRA~1/A.php 和 C:/Program Files/a.php 的实现一样,文件只会被包含一次。

如果要包含的文件不存在,include提示notice,然后继续执行下面的语句,require提示致命错误并且退出。

  win32平台下它们都是先包含后执行,所以被包含文件里最好不要再有include或require语句,这样会造成目录混乱。或许Linux下情况不同,暂时还没测试。

  如果一个文件不想被包含多次可以使用include_once或require_once## 读取,可以写入文档数据。
<?php
function r($file_name) {
 $filenum=@fopen($file_name,"r");
 @flock($filenum,LOCK_SH);
 $file_data=@fread($filenum,filesize($file_name));
 @fclose($filenum);
 return $file_data;
}
function w($file_name,$data,$method="w"){
 $filenum=@fopen($file_name,$method);
 flock($filenum,LOCK_EX);
 $file_data=fwrite($filenum,$data);
 fclose($filenum);
 return $file_data;
}
?>

转载于:https://www.cnblogs.com/lechie/archive/2010/08/24/2383240.html

require(),include(),require_once()和include_once()的异同相关推荐

  1. require(),include(),require_once()和include_once()区别

    我把这两个语句放在一起介绍,读者可以比较学习.  1.require()语句 require()语句用于指定的文件代替语句本身,就象C语言中的include()语句一样.如果php配置文件php.in ...

  2. 深入理解require与require_once与include以及include_once的区别

    http://www.jb51.net/article/37942.htm 本篇文章是对require与require_once与include以及include_once的区别进行了详细的分析介绍, ...

  3. PHP包含文件函数include、include_once、require、require_once区别

    PHP的4个文件包含函数区别 include.include_once.require.require_once include() .require()语句包含并运行指定文件. 结构包含上基本一样, ...

  4. PHP中的include、include_once、require、require_once

    include.include_once().require.require_once() 作用: 通过 include 或 require 语句,可以将 PHP 文件的内容插入另一个 PHP 文件( ...

  5. require,include,require_once和include_once之间的区别?

    在PHP中: 什么时候应该使用require与include ? 什么时候应该使用require_once和include_once ? #1楼 您应该将类​​和函数定义组织在文件中. 使用requi ...

  6. PHP require、include、require_once、include_once用法及区别

    文章目录 前言 一.include语句 二.require语句 三.require_once和include_once语句 总结 前言 本文就介绍了PHP的include.require.includ ...

  7. PHP require、include、require_once 和 include_once 的区别

    通常,开发人员会对 require.include.require_once 和 include_once 感到困惑,因为它们看起来相同,但又有些不同.让我们看看它们有何不同. require.inc ...

  8. php语言的include,php中include_once指的是什么意思

    php中include_once指的是什么意思 发布时间:2020-11-10 10:58:06 来源:亿速云 阅读:121 作者:小新 这篇文章给大家分享的是有关php中include_once指的 ...

  9. PHP中include、include_once、require、require_once四者区别

    require的使用方法如   require("MyRequireFile.php");   .这个函式通常放在   PHP   程式的最前面,PHP   程式在执行前,就会先读 ...

最新文章

  1. 城市地图, 军事地图, 矿山地图, 电力地理, 电子地图, 制图, 编辑, OCX控件, VC++源代码组件库...
  2. dr.oracle素颜霜好用吗,treechada素颜霜好用吗_treechada素颜霜评测
  3. arm 驱动基础:查询方式的按键驱动程序
  4. 云通信产品运营带你玩转号码隐私保护
  5. 在 Windows 中,当一个应用程序窗口被关闭,该应用程序将会保留在哪里?
  6. java中对象输入流和输出流
  7. 一语点破Java中的静态static关键字
  8. 在线十六进制颜色随机生成器
  9. 昆特牌Online——客户端用到的一些技术
  10. Google的Java常用类库 Guava
  11. sklearn——一元线性回归
  12. 电容的耐压值选择---陶瓷电容、钽电容、电解电容
  13. 微信小程序毕业设计 基于微信小说小程序系统开题报告
  14. STM32MP157 Linux系统移植开发篇19:Linux内核Wi-Fi驱动移植
  15. 雷军:小米今年预计销售200亿 站在风口猪都会飞
  16. python实现判断闰年
  17. 南大周志华postgr
  18. Android中的launchMode
  19. 计算机基础16秋在线作业,16秋华师《计算机基础》在线作业
  20. 发文章的期刊-山东省期刊

热门文章

  1. js中null和undefined
  2. 使用JScript设置SVN客户端hook
  3. 时代亿信 文件共享访问控制网关
  4. web.config 中SessionState的配置 [转]
  5. android 如何使用LaunchMode
  6. 内存映射(mmap系统调用)
  7. getExternalFilesDir到底是什么
  8. 【SQL】表A多个字段,关联表B一个字段说明
  9. 基于思科模拟器的AAA配置与验证
  10. 记一次vue+vuex+vue-router+axios+elementUI开发(二)