PHP7实践指南:O2O网站与App后台开发
上QQ阅读APP看书,第一时间看更新

3.4 包含语句

包含语句用于在PHP文件中引入另外一个文件,这样有利于代码重用。PHP中共有4个包含外部文件的方法,分别是include、include_once、require、require_once。

3.4.1 include语句

include语句包含并运行指定文件。被包含文件先按参数给出的路径寻找,如果没有给出目录(只有文件名)就按照include_path(在配置文件中可查看include_path)指定的目录寻找。如果在include_path下没找到该文件,那么include最后会在调用脚本文件所在的目录和当前工作目录下寻找。如果最后仍未找到文件,include结构就会发出一条警告。例如:

        <? php
        include 'a.php';
        echo "111";
        ?>

上述示例中,PHP若找不到a.php文件,则会发出一条警告,不过后面的语句还会继续执行。以上代码的执行结果在浏览器中的输出如下:

          Warning: include(a.php): failed to open stream: No such file or directory in/Library/WebServer/Documents/book/str.php on line 280


          Warning: include(): Failed opening 'a.php' for inclusion (include_path='.:')in /Library/WebServer/Documents/book/str.php on line 280
          111

我们在a.php里编写代码:

        <? php
        $color = 'green';
        ?>

在test.php中编写代码:

        <? php
        include 'a.php';
        echo $color;
        ?>

a.php和test.php在同一个文件夹里。运行test.php,打印结果为:

          green

当一个文件被包含时,其中所包含的代码继承了include所在行的变量范围。从该处开始,调用文件在该行处可用的任何变量在被调用的文件中也都可用,不过所有在包含文件中定义的函数和类都具有全局作用域。如果include出现于调用文件中的一个函数里,那么被调用的文件中所包含的所有代码将表现得如同它们是在该函数内部定义的一样,所以它将遵循该函数的变量范围。此规则的一个例外是魔术常量,魔术变量是在发生包含之前就已被解析器处理的。

a.php中的代码:

        <? php
        $color = 'green';
        echo __LINE__ . "<br/>";
        ?>

test.php中的代码:

        <? php
        include'a.php';
        echo$color . "<br/>";
        aa();
        function aa(){
            global$color;
            echo$color;
        }
        ?>

运行test.php文件,结果如下:

          3
          green
          green

3.4.2 include_once语句

include_once语句和include语句类似,include_once用于在脚本执行期间同一个文件有可能被包含超过一次的情况时确保只被包含一次,以避免函数重定义、变量重新赋值等问题。

例如,a.php代码:

        <? php
        echo 1;
        echo 2;
        ?>

test.php代码:

        <? php
        include 'a.php';
        include 'a.php';
        ?>

运行test.php,打印结果为:

          1212

如果test.php中的代码为:

        <? php
        include_once 'a.php';
        include_once 'a.php';
        ?>

那么运行test.php的结果为:

          12

3.4.3 require语句

require语句和include语句几乎完全一样,不同的是当被包含的文件不存在时,require语句会发出一个Fatal error错误,程序终止执行;include则会发出一个Warining警告,接着向下执行。

例如,有如下test.php代码:

        <? php
        require 'b.php';
        echo 1;
        ?>

如果PHP没有找到b.php文件,就会发出一个错误。代码执行结果如下:

          Warning: require(b.php): failed to open stream: No such file or directory in/Library/WebServer/Documents/book/str.php on line 280


          Fatal error: require(): Failed opening required 'b.php' (include_path='.:')in /Library/WebServer/Documents/book/str.php on line 280

如果test.php中将require换成include包含b.php,执行结果则会是:

          Warning: include(b.php): failed to open stream: No such file or directory in/Library/WebServer/Documents/book/str.php on line 280


          Warning: include(): Failed opening 'b.php' for inclusion (include_path='.:')in /Library/WebServer/Documents/book/str.php on line 280
          1

使用include包含的文件不存在,发出一个警告,但程序会继续执行,所以显示出了1。

3.4.4 require_once语句

require_once语句和require语句完全相同,唯一的区别是PHP会检查该文件是否已经被包含过,如果是,就不会再次包含。此处不再举例说明。