include/require(还有include_once/require_once) 是PHP中引用文件必不可少的命令。他们都会读入文件,替换包含语句,并执行读入文件中的代码。那么他们有什么区别呢?
1, _once 后缀区别,故名思议,就是只包含一次,zend 引擎会检查是否已经包含了一次,如果已包含,则忽略之。可避免重复包含/运行脚本。当然,这个check 是需要昂贵代价的,呵呵!不过目前来说,为了保证不被重复包含,我们习惯上仍然推荐使用 _once 系列。所以我们必须要明白这里的区别,并进行相应的取舍。
2, 读入文件的时机不同。
require 是在 引擎编译脚本的时候一次性导入的。就是说在编译阶段,就会读入文件替换该 require 语句。当然,这个时候并未运行该段脚本。是先编译后运行的。这个我们将在今后专门用一个篇幅描述php 的运行原理。
include 是在脚本运行到该语句时才读入文件并执行的。
因此,require 只要出现,就会导入,及时用 条件判断包含文件。require 适合在执行前一次性载入静态脚本。而include 适合在运行时动态读入静态、动态脚本。
3,错误处理不同
require 为绝对包含,因为在编译阶段发生,如果这部分发生错误,会抛出致命错误,将终止于编译阶段,不会执行脚本。
include 是在运行中动态载入的,如果发生错误,将会忽略,继续执行脚本。