include
include 和require几乎是相同的,我们先来介绍下include。
include 是一个特殊的语言结构,其参数不需要括号。
include的返回值
在失败时 include 返回 FALSE 并且发出警告。成功默认会返回 1,除非在被包含的文件中有return语句终止,返回值为return的值。
示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
return.php <?php $var = 'PHP'; return $var; ?> noreturn.php <?php $var = 'PHP'; ?> testreturns.php <?php $foo = include 'return.php'; echo $foo; // prints 'PHP' $bar = include 'noreturn.php'; echo $bar; // prints 1 ?> |
include路径查找顺序
如果定义了路径,不管是绝对路径(在 Windows 下以盘符或者 \ 开头,在 Unix/Linux 下以 / 开头)还是当前目录的相对路径(以 . 或者 .. 开头),include_path 都会被完全忽略。例如一个文件以 ../ 开头,则解析器会在当前目录的父目录下寻找该文件。
如果没有给出目录(只有文件名)时则先按照 include_path 指定的目录寻找。如果在 include_path 下没找到该文件,则会在调用脚本文件所在的目录和当前工作目录下寻找。
include 变量范围
当一个文件被包含时,其中所包含的代码继承了 include 所在行的变量范围。从该处开始,调用文件在该行处可用的任何变量在被调用的文件中也都可用。相对于被包含文件来说,包含文件中定义的函数和类都具有全局作用域。
如果 include 出现于调用文件中的一个函数里,则被调用的文件中所包含的所有代码将表现得如同它们是在该函数内部定义的一样。所以它将遵循该函数的变量范围。此规则的一个例外是魔术常量,它们是在发生包含之前就已被解析器处理的。
include与require的区别
处理失败方式不同
require:在出错时产生 E_COMPILE_ERROR 级别的错误, 导致脚本终止。
include:只产生警告(E_WARNING),脚本会继续运行。
注意在 PHP 4.3.5 之前,包含文件中的语法错误不会导致程序停止,但从此版本之后会。
include_once和require_once
include_once和require_once的语句分别与include和require相同,不同之处在于,include_once 和require_once可以用于在脚本执行期间同一个文件有可能被包含超过一次的情况下,想确保它只被包含一次以避免函数重定义,变量重新赋值等问题。