PHP的文件引用涉及到四个函数:
1.include()
2.include_once()
3.require()
4.require_once()
这四个函数常常会给PHP初学者造成困扰,总的来说困扰有这么几个:
1.四个函数的区别
2.这四个函数的适用环境
3.使用以上函数后造成的路径问题
下面我们就这三个典型的问题进行分析。
一、区别:
1.include_once()与require_once()在引入文件时,会检测该文件是否在之前已经被引入过,如果已经被引入过则直接返回TRUE。如果没有被引入过,则引入文件。而其他两个函数不会对文件是否被重复引入做出检测。
注意:在PHP 4中的 Windows 系统下是不区分大小写的。也就是说下面的代码都是引入的a.php。当然,PHP 5不会再出现这样的情况了。
include_once "a.php"; include_once "A.php";
2.include()与inclue_once()在引入文件失败时,只会产生警告信息,但是不会终止程序继续向下执行。
Warning:require(wrongFile.php)[function.require]: failed to open stream:No such file or directory in C:homewebsite est.php on line 5
而其他两个函数在文件引入失败时,会产生致命错误,并终止整个程序的运行。
Fatal error:require()[function.require]:Failed opening required 'wrongFile.php'(include_path='.;C:php5pear')in C:homewebsite est.php on line 5
二、使用环境
1.由第二条实际上我们已经可以看出他们各自的使用环境了。include()适合用来引入普通文件(例如:视图模板),而require()适合用来引入核心文件(例如:核心类文件)。因为前者引入的文件相对于整个程序系统来说重要性要低一些,所以就算出错也可以继续执行后面的程序。但是如果说一个系统或者框架的核心文件都引入失败的话,那么程序还有继续运行下去的必要吗?
2.include_once()与require_once()实际上就是在第三条基础上对引入文件做了更严格的重复性检测而已。同样是前者一般性引入,后者重要引入。
三、路径
至于相对路径问题,只要记住一个原则就可以了:加入A引入B,B同时又引入了C。那么,B中引入C的相对路径应该以A--C的相对路径来写。因为,PHP的文件引入实际上就相当于将B的代码复制到A中,也就是说我们从头到尾都在A中执行代码,当然应该以A为参考来引入C了。
四、其他
1.我们还可以用include()来引用远程PHP文件,并且先这个被引用的文件传参,当然这有一定的先决条件。(详见官方手册)
include 'http://www.example.com/file.php?foo=1&bar=2';
2.注意:这几个函数不一定非得要在后面加括号
include('a.php'); include("a.php"); include 'a.php'; include "a.php";
以上的写法都是可以的。当然,如果后面的参数包含变量,你得斟酌一下。
OK,PHP文件引入就分析到这里。