include和require都是引入指定的文件。
如果引入文件没有写路径,则会在include_path里面查找;如果引入时写了文件路径(不管是绝对路径还是相对路径) include_path 会被忽略
所以在include_path中的文件引入时可以不写路径
当一个文件被包含时,其中所包含的代码继承了 引入所在行的变量范围。从该处开始,调用文件在该行处可用的任何变量在被调用的文件中也都可用。不过所有在包含文件中定义的函数和类都具有全局作用域
_once表示只引入一次,已经引入过一次的文件接下来就不会再引入。
例如在【index.php】中
<?php echo '最爱PHP'; ?>
运行下面的程序代码
<?php include 'index.php'; require 'index.php'; include_once 'index.php'; require_once 'index.php'; ?>
输出的结果会是:最爱PHP最爱PHP,如果将_once引入的语句放在include和require上面,结果将是:最爱PHP最爱PHP最爱PHP最爱PHP。
1、加载失败的处理方式不同
include在引入不存文件时产生一个警告且脚本还会继续执行,
require则会导致一个致命性错误且脚本停止执行。
2、include()是有条件包含函数,而 require()则是无条件包含函数
<?php if(FALSE){ include 'file.php'; //file.php不会被引入 } if(FALSE){ require 'file.php'; //file.php将会被引入 } ?>
PHP 会把require的文件预先读入(即使当前文档有多个require同一个文件的语句,被读文件也只会读取一次,被读文件的代码只执行一次),所以不管放到文档的什么地方,即时放到了流程控制语句中,也一定会被加载;
而include只有执行到include时才会读入,而且是有多少个include,就会读入多少次,被读文件的代码也会反复执行多次。
3、文件引用方式
include有返回值,而require没有
<?php $retVal = include(’somefile.php’); if(!empty($retVal)){ echo "文件包含成功"; }else{ echo "文件包含失败"; } ?>
require()执行时,引用的文件只处理一次(引入后 PHP 会将当前文档重新编译,让引入文件成为当前文档的一部分,引用的文件内容编译时会替换当前文档的require()语句)。效率比较高,不需要每次都读取引入文件。
include()执行时,引用的文件每次都要进行读取和评估,若需要按流程控制读取不同的文件或者需要每次引入都执行引入文件中的代码(比如循环),就使用include()。
require 通常放在 PHP 程序的最前面,PHP 程序在执行前,就会先读入 require 所指定引入的文件,使它变成 PHP 程序网页的一部份。常用的函数,亦可以这个方法将它引入网页中。
include 一般是放在流程控制的处理部分中。PHP 程序网页在读到 include 的文件时,才将它读进来。
另外关于include和require后面是否加括号的问题,
理论上来说:include和require后面加不加括号对执行结果没有区别,但是加上括号效率较低,所以后面能不加括号就不加括号。