1. include
2. require
3. include_once
4. require_once
方法详解:
1. `include` 语句包含并运行指定文件。
2. `require` 和 `include` 险些完备一样,除了处理失落败的办法不同之外。`require` 在出错时产生 `E_COMPILE_ERROR`(编译致命缺点 64 编译时致命性错。这就像由Zend脚本引擎天生了一个 `E_ERROR`。) 级别的缺点。换句话说将导致脚本中止而 `include` 只产生警告(`E_WARNING`),脚本会连续运行。
3. `include_once` 语句在脚本实行期间包含并运行指定文件。此行为和 `include` 语句类似,唯一差异是如果该文件中已经被包含过,则不会再次包含。犹如此语句名字暗示的那样,只会包含一次。可以用于在脚本实行期间同一个文件有可能被包含超过一次的情形下,想确保它只被包含一次以避免函数重定义,变量重新赋值等问题。
4. `require_once` 语句和 `require` 语句完备相同,唯一差异是 `PHP` 会检讨该文件是否已经被包含过,如果是则不会再次包含。
总结:1. `include` 和 `require` 语句都是包含并运行指定文件,不同的是处理失落败的办法不同,以是一样平常 require 用于加载主要文件,比如加载框架的勾引文件,如果出错将终止程序,`include` 一样平常用于加载配置文件或者第三方扩展库等,比如 `composer` 便是用的 `include` 加载文件的。
2. `include_once` 和 `require_once` 语句与 `include` 和 `require` 语句的不同便是,如果该文件已经包含过就不会再次包含了,这在避免文件重复加载,函数重定义,变量重新赋值等问题上有用,但是一定程度上会有性能损耗问题,毕竟须要检讨是否加载过。以是一样平常确定的情形下会优先利用 `include` 和 `require` ,而不是 `include_once` 和 `require_once` 语句。
实验扩展知识:
包含文件的语句会受php.ini 和 include_path(;include_path = \公众.:/php/includes\"大众)配置项影响,干系函数:
`ini_set()` - 为一个配置选项设置值
`set_include_path` - 设置当前的 `include_path` 配置选项
`get_include_path()` - 获取当前的 `include_path` 配置选项
`restore_include_path()` - 还原 `include_path` 配置选项的值
直接引入(包含)文件默认因此上面set_include_path设置的目录为环境目录,环境目录找不到再从当前目录找
/表示做事器根目录,linux上面直接表示磁盘根目录,Windows下面表示某个磁盘根目录例如D:\\\\,`realpath()`可以返回绝对路径。
./表示当前运行文件的同级目录(入口),而不是当前脚本所在的目录(include 语句所在脚本文件的目录)
如果以相对付当前脚本文件引用文件请用__DIR__常量
把稳:第一种情形,请小心了!
这个一样平常表示从当前目录找,但是什么是当前目录呢?这个不同情形是不同的,它会先把当前运行文件的目录当成当前目录,如果找不到,再把当前脚本所在的目录当成当前目录,从当前脚本所在目录开始找,如果还找不到就报错,引入文件不存在。
以是如果意图清楚,最好是利用末了两种办法引入文件,这样能减少不必要的麻烦,其余利用绝对路径比利用相对路径加载文件性能更高,这样能避免系统去解析相对路径而耗费一些韶光。
当前运行文件,当前脚本,请把稳仔细理解它们的差别,前者作为入口运行,后者则被脚本通过引用的办法调用。魔术常亮__FILE__,__DIR__便是后者的文件名(包含完全的绝对路径)和目录。
关于路径的其他引申PHP脚本这种文件相互引用包含的关系可和网页中静态文件css中的`../`路径不同,css中的路径之和所在css文件url路径干系,和网页没有半毛钱关系,网页只是加载它而已,但是如果css中利用`/`那情形就不同了,一样平常`/`为根域名,再说一遍,静态文件中除了`/`其他的路径都是相对付当前静态文件的,和网页地址没有关系。网页中的`./`和`/`则是相对付当前url路径(对付pathinfo也没有关系,不会受影响,认不出是假目录的)和根域。
还可以通过注册自动加载方法来实现自动加载,框架大部分都实现了自动加载,不然手动写包含语句不利于掩护,太麻烦。