PHP提供了两个非常简单却很有用的语句,它们允许重新使用任何类型的代码。使用一条require或include语句,可以将一个文件载入到PHP脚本中。通常,这个文件可以包含任何希望在一个脚本中输入的内容,其中包括PHP语句、文本、HTML标记、PHP函数或PHP类。
这些语句的工作方式类似于大多数Web服务器提供的服务器端包含方式以及C语言或C++中的#include语句。
require和include几乎是相同的。二者唯一的区别在于函数失败后,require函数将给出一个致命的错误。而include只是给出一个警告。
require和include也有两个变体函数,分别是require_once和include_once。正如你可能猜到的,这两个函数的作用是确保一个包含(included)的文件只能被引入一次。对于我们已经介绍过的例子——页眉和脚注(header and footer)——这个功能并不是非常有用。
当使用require和include来引入函数库时,它们才非常有用。使用这两个函数可以防止错误的引入同样的函数库两次,从而出现重复定义的错误。如果关心编码实践,可以考虑使用require和include,因为它们的运行速度较快。
5.2.1 文件扩展名和require函数
如下所示的代码保存于reusable.php文件中:
<?php
echo'Here is a very simple PHP statement.<br/>';
?>
如下所示的代码保存于main.php文件中:
<?php
echo'This is the main file.<br/>';
require('reusable.php');
echo'The script will end now.<br/>';
?>
如果载入reusable.php,当浏览器中显示出"Here is a very simple PHP statement"时,你不会感到奇怪。如果载入main.php,则会发生一件更有趣的事情。该脚本输出结果如图5-1所示。
图 5-1 main.php文件的输出显示require语句的结果当需要一个文件的时候,可以使用require语句。在前面的例子中,我们使用的文件是reusable.php。当运行该脚本时,require语句:
require('reusable.php');
将被请求的文件内容代替,然后再执行脚本。这就意味着,当载入main.php文件时,它会像如下所示的代码那样执行:
<?php
echo"This is the main file.<br/>";
echo"Here is a very simple PHP statement.<br/>";
echo"The script will end now.<br/>";
?>
当使用require语句时,必须注意处理文件扩展名和PHP标记的不同方式。
PHP并不会查看所需文件的扩展名。这就意味着,只要不想直接调用这个文件,就可以任意命名该文件。当使用require语句载入文件时,它会作为PHP文件的一部分被执行。
通常,如果PHP语句放在一个HTML文件(例如,名为page.html的文件)中时,它们是不会被处理的。PHP通常用来解析扩展名被定义成如.php的文件。(在Web服务器配置文件中可能不是这样)但是,如果通过require语句载入这个page.html,文件内的任何PHP命令都会被处理。因此,可以使用任何扩展名来命名包含文件,但要尽量遵循一个约定,例如将扩展名命名为.inc或.php是一个很好的办法。
需要注意的一个问题是,如果扩展名为.inc或一些其他的非标准扩展名的文件保存在Web文档树中,而且用户可以在浏览器中直接载入它们,用户将可以以普通文本的形式查看源代码,包括任何密码。因此,将被包含文件保存在文档树之外,或使用标准的文件扩展名是非常重要的。
提示 在这个例子中,可重用文件(reusable.php)代码如下所示:
<?php
echo"Here is a very simple PHP statement.<br/>";
?>
我们将文件中的PHP代码放到PHP标记之间。如果希望一个所需文件中的PHP代码能够被当成PHP代码进行处理,就必须这样做。如果不使用PHP标记,代码将会被视为文本或者HTML脚本,因此也就不会被执行。