php中的文件包含 include,require,include_once,require_once
文件包含:是指将一个文件的内容包含进另外一个文件,有利于代码的复用等。
php中文件包含指令有4个,分别为:
include,include_once,require,require_once
其中:include和require:使用一次便包含一次文件;而include_once和require_once则是:不管在一个脚本中包含
另外一个脚本多少次,都只加载一次,不会重复,这样可以避免因一个文件的重复包含,导致的函数重定义等问题。
include_once和require_once在包含文件之前会做一次判断,判断当前需要包含的文件是否已经被包含过了,如果
已经包含过了就放弃包含,否则就包含进来。
include和require的区别是:include会尝试着去包含,如果包含不到,会提示警告错误,但是不会影响当前自身脚
本的执行;require一定会去包含文件,而且包含的文件必须不能出错,否则会终止当前自身脚本的执行。
关于文件包含的使用,php帮助手册中提到有些需要注意的地方,可以帮助理解文件包含的机制,从而避免不必要的
麻烦:
1.被包含文件先按参数给出的路径寻找,如果没有给出目录(只有文件名)时则按照 include_path 指定的目录寻找
。如果在 include_path 下没找到该文件则 include 最后才在调用脚本文件所在的目录和当前工作目录下寻找。如
果最后仍未找到文件则 include 结构会发出一条警告;这一点和 require 不同,后者会发出一个致命错误。
2.当一个文件被包含时,其中所包含的代码继承了 include 所在行的变量范围。从该处开始,调用文件在该行处可
用的任何变量在被调用的文件中也都可用。不过所有在包含文件中定义的函数和类都具有全局作用域。
3.如果 include 出现于调用文件中的一个函数里,则被调用的文件中所包含的所有代码将表现得如同它们是在该函
数内部定义的一样。所以它将遵循该函数的变量范围。此规则的一个例外是魔术常量,它们是在发生包含之前就已被
解析器处理的。
4.在失败时 include 返回 FALSE 并且发出警告。成功的包含则返回 1,除非在包含文件中另外给出了返回值。可以
在被包括的文件中使用 return语句来终止该文件中程序的执行并返回调用它的脚本。同样也可以从被包含的文件中返
回值。可以像普通函数一样获得 include 调用的返回值。
5.因为 include 是一个特殊的语言结构,其参数不需要括号。在比较其返回值时要注意:
if (include('vars.php') == 'OK') { // won't work, evaluated as
echo 'OK' ; // include(('vars.php') == 'OK')
}
if ((include 'vars.php') == 'OK') { // works
echo 'OK' ;
}
6.如果在包含文件中定义有函数,这些函数不管是在 return之前还是之后定义的,都可以独立在主文件中使用。如果
文件被包含两次,PHP 5 发出致命错误因为函数已经被定义,但是 PHP 4 不会对在 return之后定义的函数报错。推荐
使用 include_once 而不是检查文件是否已包含并在包含文件中有条件返回。
7.当一个文件被包含时,语法解析器在目标文件的开头脱离 PHP 模式并进入 HTML 模式,到文件结尾处恢复。由于此
原因,目标文件中需要作为 PHP 代码执行的任何代码都必须被包括在有效的 PHP 起始和结束标记之中。
ps:我的理解是,包含文件时,会把被包含的整个文件原样放在目标文件中,然后才去解析,基于以上第3点,可知,
魔术常量是在此之前解析的,是个例外。