一、include
语句包含并运行指定文件。以下文档也适用于 require 。
被包含文件先按参数给出的路径寻找,如果没有给出目录(只有文件名)时则按照 include_path 指定的目录寻找。如果在 include_path 下没找到该文件则 include 最后才在调用脚本文件所在的目录和当前工作目录下寻找。如果最后仍未找到文件则 include 结构会发出一条警告;这一点和 require 不同,后者会发出一个致命错误。
如果定义了路径——不管是绝对路径(在 Windows 下以盘符或者 \ 开头,在 Unix/Linux 下以 / 开头)还是当前目录的相对路径(以 . 或者 .. 开头)——include_path 都会被完全忽略。例如一个文件以 ../ 开头,则解析器会在当前目录的父目录下寻找该文件。
有关 PHP 怎样处理包含文件和包含路径的更多信息参见 include_path 部分的文档。
当一个文件被包含时,其中所包含的代码继承了 include 所在行的变量范围。从该处开始,调用文件在该行处可用的任何变量在被调用的文件中也都可用。不过所有在包含文件中定义的函数和类都具有全局作用域。
- vars.php
- <?php
- $color = 'green' ;
- $fruit = 'apple' ;
- ?>
- test.php
- <?php
- echo "A $color $fruit " ; // A
- include 'vars.php' ;
- echo "A $color $fruit " ; // A green app
- ?>
二、require
require 和 include 几乎完全一样,除了处理失败的方式不同之外。
require 在出错时产生 E_COMPILE_ERROR 级别的错误。换句话说将导致脚本中止而 include 只产生警告( E_WARNING ),脚本会继续运行。
三、include_once
include_once 语句在脚本执行期间包含并运行指定文件。此行为和 include 语句类似,唯一区别是如果该文件中已经被包含过,则不会再次包含。如同此语句名字暗示的那样,只会包含一次。
include_once可以用于在脚本执行期间同一个文件有可能被包含超过一次的情况下,想确保它只被包含一次以避免函数重定义,变量重新赋值等问题。
- <?php
- include_once "a.php" ; // 这将包含 a.php
- include_once "A.php" ; // 这将再次包含 a.php!(仅 PHP 4)
四、require_once
require_once 语句和 require 语句完全相同,唯一区别是 PHP 会检查该文件是否已经被包含过,如果是则不会再次包含。
参见 include_once 的文档来理解 _once 的含义,并理解与没有 _once 时候有什么不同。
五、include和require文件引入各有什么不同?
1、错误级别和程序是否中止/运行
include引入文件的时候,如果碰到错误, include 只产生警告( E_WARNING ),脚本会继续运行。
require引入文件的时候,在出错时产生 E_COMPILE_ERROR 级别的错误,脚本会立刻中止。
2:是否条件包含
include()与require()的功能相同,用法上却有一些不同;
include()是有条件包含函数,而require()则是无条件包含函数,
例如下面例子,如果变量$file为真,则将包含文件fujieace.php:
- <?php
- if($file){
- include 'fujieace.php';//
- }
六、require,include,require_once和include_once哪个效率更高?
如果只拿require和include来比较,require效率高于include;前提是先不考虑复杂场景及逻辑;
include和include_once相比较,虽然说include_once只引用一次,效率高于include;但是:在文件引入前,include_oncle每次都需要判断一下是否包含文件;效率虽高,但是增加了程序的逻辑判断;如何用,请根据自自己的场景来做调整;
require和require_once同理;
2016年12月30日 21:34:40 沙发
我在培训Php的时候,一直用的include,只是后来做项目,老板要求我们用include_once,说效率快些!然后就批量替换了。没有太细纠结这些理论;
2016年12月30日 21:31:13 板凳
博主include用得还是比较多的!