购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅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会检查该文件是否已经被包含过,如果是就不会再次包含。此处不再举例说明。 Z+F+p+sGNBTrBM5lqoPP+nzhckrIhdfcYBNS5mEvm6u4qyV/hOACVsJJ9t+Hwq/m

点击中间区域
呼出菜单
上一章
目录
下一章
×