zoukankan      html  css  js  c++  java
  • include和require的区别误区

    面试时总会被问到include和require的区别,回答的时候一般也是有以下几种区别:

    1、include引入文件的时候,如果碰到错误,会给出警告,并继续运行下边的代码。

      require引入文件的时候,如果碰到错误,会给出致命错误,并停止运行下边的代码。

    2、在失败时 include 返回 FALSE 并且发出警告。成功的包含则返回 1,除非在包含文件中另外给出了返回值。

      require无返回值 

    3、incluce在用到时加载,require在一开始就加载

    4、include()与require()的功能相同,用法上却有一些不同,include()是有条件包含函数,而require()则是无条件包含函数。

    以上都是在网上随手一搜就可以出来的答案,如果你用的php版本时php4或者更早之前的,这些区别你在回答时,是没有什么问题的,但是,如果是之后的版本,你看过之后不加实践,那么,你就要注意了。

    下面,我将在php5.3和php7这两个版本下进行实践,检验上述4个区别。

    区别一的验证:include引入文件的时候,如果碰到错误,会给出警告,并继续运行下边的代码;require引入文件的时候,如果碰到错误,会给出致命错误,并停止运行下边的代码。

    include包含

    <?php
    include 'test.php';
    
    echo 'aaa';
    
    //运行结果
    Warning: include(test.php): failed to open stream: No such file or directory in
    D:Program FilesPhpToolApache24htdocs1.php on line 2 Warning: include(): Failed opening 'test.php' for inclusion (include_path='.;C:phppear') in
    D:Program FilesPhpToolApache24htdocs1.php on line 2 aaa  //可以看到这里输出了echo执行的值

    require包含

    <?php
    require 'test.php';
    
    echo 'aaa';
    
    //运行结果
    Warning: require(test.php): failed to open stream: No such file or directory in
    D:Program FilesPhpToolApache24htdocs1.php on line 2 Fatal error: require(): Failed opening required 'test.php' (include_path='.;C:phppear') in
    D:Program FilesPhpToolApache24htdocs1.php on line 2
    //可以看到此处只有致命错误提示,没有再输出echo执行后的值

    由以上结果可以判断出,区别一是准确无误的,你可以大声的告诉面试官,就是这个答案。

    区别二的验证:在失败时 include 返回 FALSE 并且发出警告。成功的包含则返回 1,除非在包含文件中另外给出了返回值;require无返回值 

    include返回值

    <?php
    var_dump(include '2.php');  //成功时返回int(1),
                  //失败时"在失败时 include 返回 FALSE 并且发出警告。
                  //成功的包含则返回 1,除非在包含文件中另外给出了返回值。"(这是php7手册中的原话,经实践通过)

    require返回值

    <?php
    var_dump(require '2.php');  //成功时返回值也是int(1),
                  //失败时只发出致命错误,无返回值,其实想想也知道,根据区别一可以得知,require只要发生错误就中止脚本运行了,怎么还会有返回值呢

    所以,目前为止,我们可以得出区别二一部分是正确的,回答时我们可以这样回答:include和require包含成功时都返回1,除非在包含文件中另外给出了返回值;而在失败时 include 返回 FALSE 并且发出警告,require仅发出致命错误无返回值。

    区别三的验证:incluce在用到时加载,require在一开始就加载    

    公共文件

    <head>
    <meta charset="utf-8" />
    </head>
    <body>
    <p>测试</p>
    </body>
    </html>

    include多次包含相同文件

    <?php
    echo 'aaa<br />';
    include '2.php';

    //运行结果 aaa

      测试

    require多次包含相同文件

    <?php
    
    echo 'aaa<br />';
    require '2.php';
    //运行结果  
    aaa

      测试

    由上述结果可以看到,include和require包含之前如果有别的php脚本同样还是会先执行php脚本再执行包含,所以区别三是错误的(这里的区别三和区别四其实是同一个道理)。

    区别四的验证:include()与require()的功能相同,用法上却有一些不同,include()是有条件包含函数,而require()则是无条件包含函数。   

    假设2.php不存在,故按照区别四来看结果,include包含的代码应该未执行,不报错,而require包含的这段代码require执行了并且报错。

    include包含

    <?php
    if(false) {
        include '2.php';
    }

    //运行结果:无输出(即未执行include)

    require包含

    <?php
    if(false) {
        require '2.php';
    }

    //运行结果:无输出(即未执行require)

    从实践结果中完全可以看出,区别四的说法是错误的,include和require都是条件包含的。

    总结:include和require的区别主要是

    1> include引入文件的时候,如果碰到错误,会给出警告,并继续运行下边的代码。

      require引入文件的时候,如果碰到错误,会给出致命错误,并停止运行下边的代码。

    2> include和require包含成功时都返回1,除非在包含文件中另外给出了返回值;

      而在失败时 include 返回 FALSE 并且发出警告,require仅发出致命错误无返回值。

    真正的区别其实只有一个:(再次强调,该区别仅再php5.3及php7版本实验通过,再早的版本不予实验)

     include引入文件的时候,如果碰到错误,会给出警告,并继续运行下边的代码。

    require引入文件的时候,如果碰到错误,会给出致命错误,并停止运行下边的代码。

  • 相关阅读:
    《Java 学习笔记》 第三章阅读体验
    《Java 学习笔记》 第四章阅读体验
    Android 自定义控件的几个步骤
    新的Android应用 记账理财助手 登陆国内各大市场啦。
    第一个 Android 应用发布到 Google Market 中了
    DoWhat 登录 AppChina应用汇啦
    开始阅读《Java 学习笔记》一书
    Android 开发的多分辨率自适应图片要点
    五种开源协议的比较(BSD,Apache,GPL,LGPL,MIT) – 整理
    在oracle中建立自动编号sql
  • 原文地址:https://www.cnblogs.com/totian/p/7324254.html
Copyright © 2011-2022 走看看