include() 与require()
1.1相同点
首先,include() 与require() 的功能是相同,它们的结构在包含文件上完全一样,都是包含并运行指定文件
1.2 不同点
1.2.1区别一 对错误的处理不同
require()语句在遇到包含文件不存在,或是出错的时候,就停止即行,并 报错;
include()则继续执行,只会 显示一个警告错误
说明案例如下:
include('hello.php');
echo 'include test final!'; //include报错,但是会继续执行,显示:include test final!
require('hello.php');
echo 'require test final!'; //require报错,停止代码的执行
1.2.2区别二 执行执行上的不同
require()会在PHP 程序执行前,就先读入require所指定的文件;而include()会放在 流程控制的处理部分中,也就是 当PHP执行到include文件时,才将指定的文件读入;
用通俗易懂的话说就是: include在用到的时候才加载,而require在一开始就加载了.所以在运行机制上, require()的效率相较于include()会稍微高一些。但是也正因为这种特性,include可以应用到条件语句内执行,而require()因为在程序被执行前就先引入文件,所以即使设定了判断语句来执行require(),无论true还是false,都会被执行
案例如下:
/*
*无论变量flag 真假如何,file1.php都会被执行
*而file2.php则会根据flag的值判断是否执行
*/
if($flag){
require 'file1.php';
include 'file2.php';
}
include_once()和require_once()
2.1简介
include_once()函数的作用与include相同,不过它会首先验证是否已经包含了该文件,如果已经包含,则不再执行include_once,否则,则必须包含该文件,除了这一点与include完全相同
reclude_once()函数的作用与reclude相同,语句在脚本执行期间包含并运行指定文件,此行为和 require() 语句类似,唯一区别是require_once()会先判断一下这个文件在之前是否已经被包含过,如已经包含,则忽略本次包含
2.1相同点
include_once()函数的作用和 include() 是几乎相同的,这两个函数会先检查目标文件的内容是不是在之前就已经加载过了,如果加载了,那么就不会重复加载同样的内容,也就是相同的文件只会被加载一次,后面再试图包含相同的文件时将被忽略,目地就是防止函数重定义、变量重新赋值的问题.
因为随着网站越来越大,可能会出现重复包含某些文件,这也许不是问题,但又是修改了所包含文件的变量后,却由于后面再次包含原来的文件而被覆盖,可能不希望出现这种情况。还可能出现另一个问题,即所包含文件中函数名的冲突,所以使用require_once就可以解决这些问题
2.2不同点
唯一的差别在于 include_once() 函数会先检查要加载的文件是不是已经在该程序中的其它地方被加载过了,如果有的话就不会再次重复加载
3.关于效率问题
请自觉少用include_once()、 require_once()
原因
该函数原理:
引入文件->对当前脚本语句进行比较是否包含过->决定是否引入,效率可想而知,要是整个项目上百个类库,一次执行中比较数十次,那么效率自然比较低
4.注意
4.1 include()语法
使用include()时可以忽略括号,可以根据条件来执行include()语句,在条件语句中使用include()有个怪现象,它必须包围在语句块大括号中,或者用其他语句包围符括起来
4.2 路径问题
当程序嵌套包含的时候,一定要注意包含文件的路径:比如 A文件包含了B文件,B文件包含了C文件,A,B,C文件都不在同一个文件夹下,这个时候往往很容易出错误,这时可以使用 dirname(FILE) 语句,这句的意思是获得当前脚本的绝对路径,如:require_once(dirname(FILE).’/config.php’)