php include() require() require_once() 整理说明

  •  include()  require()  区别

    • 引用文件方式

      • 对于include()来说,在include()执行时文件每次都要进行读取和评估;
      • 对于require()来说,文件只处理一次(实际上,文件内容替换了require()语句)。
      • 这就意味着如果有包含这些指令之一的代码和可能执行多次的代码,则使用require()效率比较高。
    •  是否有条件引用

      • include()是有条件包含函数,只有程序执行到该代码段时,才会调用外部文件。
      • require()则是无条件包含函数,只要程序一执行,就会立刻调用外部文件。
      • 例如在下面的一个例子中,如果变量$somgthing为真,则将包含文件somefile:
        if($something){
        include("somefile");
        }
        但不管$something取何值,下面的代码将把文件somefile包含进文件里:
        if($something){
        require("somefile");
        }
        下面的这个有趣的例子充分说明了这两个函数之间的不同。
        $i = 1;
        while ($i < 3) {
        require("somefile.$i");
        $i++;
        }
        在这段代码中,每一次循环的时候,程序都将把同一个文件包含进去。很显然这不是程序员的初衷,从代码中我们可以看出这段代码希望在每次循环时,将不同的文件包含进来。如果要完成这个功能,必须求助函数include():
        $i = 1;
        while ($i < 3) {
        include("somefile.$i");
        $i++;
        }
      • 如果每次执行代码时相读取不同的文件(虽然不大可能),性能。或者有通过一组文件叠代的循环,就使用include(),因为可以给想要包括的文件名设置一个变量,当参数为include()时使用这个变量。
  • 处理错误会时会有所不同

    • 用例子来说话,写两个php文件,名字为test1.php  和test2.php,注意相同的目录中,不要存在一个名字是test999.php的文件。
      test.php
      <?PHP
      include  (”test999.php”);
      echo  “abc”;
      ?>

      test2.php
      <?PHP
      require (”test999.php”)
      echo  “abc”;
      ?>

      浏览第一个文件,因为没有找到test999.php文件,我们看到了报错信息,同时,报错信息的下边显示了abc,你看到的可能是类似下边的情况:
      Warning: include(test1aaa.php) [function.include]: failed to open stream: No such file or directory in D:\WebSite\test.php on line 2

      Warning: include() [function.include]: Failed opening ‘test1aaa.php’ for inclusion (include_path=’.;C:\php5\pear’) in D:\WebSite\test.php on line 2
      abc

      浏览第二个文件,因为没有找到test999.php文件,我们看到了报错信息,但是,报错信息的下边没有显示abc,你看到的可能是类似下边的情况:
      Warning: require(test1aaa.php) [function.require]: failed to open stream: No such file or directory in D:\WebSite\test.php on line 2

      Fatal error: require() [function.require]: Failed opening required ‘test1aaa.php’ (include_path=’.;C:\php5\pear’) in D:\WebSite\test.php on line 2

      现在就能很清楚的知道include和require的区别:include引入文件的时候,如果碰到错误,会给出提示,并继续运行下边的代码,require引入文件的时候,如果碰到错误,会给出提示,并停止运行下边的代码。

  •  include_once和require_once:

    • include_once:使用include_once会在导入文件前先检测该文件是否在该页面的其他部分被应用过,如果有,则不会重复引用该文件,程序只能引用一次。(要导入的文件中存在一些自定义函数,那么如果在同一个程序中重复导入这个文件,在第二次导入时便会发生错误,因为php不允许相同名称的函数被重复声明)
    • require_once:require_once语句是require语句的延伸,他的功能与require语句基本一致,不同的是,在应用require_once时,先会检查要引用的文件是不是已将在该程序中的其他地方被引用过,如果有,则不会在重复调用该文件。(同事使用require_once语句在同一页面中引用了两个不同的文件,那么在输出时,只有第一个文件被执行,第二个引用的文件则不会被执行)
    • include_once语句在脚本执行期间调用外部文件发生错误时,但不会影响程序向下运行。而require_once语句则会出现一个致命的错误,用途都是确保一个被包含的文件只能被包含一次,使用这两个语句可以防止意外的多次包含相同的数据库,从而导致函数的重复定义并产生错误。
    • 在php中使用require_once/include_once虽然方便,但是代价昂贵,据测试数据来看,require_once比require慢3-4倍,所以在php开发中,我们应该尽量使用require/include。
    • 用class_exists或者function_exists检查一下,确认没有载入过再出手,至少比require_once能快上3倍。php4也可以用上。class_exists('MyClass') or requir('/path/MyClass.class.php');

    • php5可以使用__autoload来避免require,用__autoload之后比 require_once然后再实例化大概要快3倍左右,并且是动态加载。

    • 为了减少与其它第三方类库产生冲突的可能,建议不要直接使用__autoload,而是使用spl_autoload_register(PHP 5 >= 5.1.0RC1)

      参考链接
    • https://blog.csdn.net/u011598153/article/details/34087141
    • https://blog.csdn.net/weixin_40910753/article/details/79398279
    • https://blog.csdn.net/zy994914376/article/details/7565339
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值