PHP 包含代码

本文最后更新于:2024年3月18日 凌晨

PHP 包含代码

  • PHP提供了两种结构从其他模块加载代码和HTML:requireinclude,两者都加载一个文件,把它作为PHP的脚本来运行,并且如果不能找到需要加载的文件就报错,主要的区别是,尝试require一个不存在的文件将导致一个致命错误(fatal error)而停止脚本的执行,而尝试include一个不存在的文件则产生一个警告(warning),不会停止脚本的执行。
  • include的一般用途是从通用的站点设计中分离出特定页面的内容,一般元素(如header和footer)放在各自的HTML文件里,并且每个页面都如下所示:
1
2
3
<? Include 'header.html'; ?>
content
<? Include 'footer.html'; ?>
  • 使用include是因为它允许PHP在站点设计文件中有错误发生时继续处理页面,Require则比较严谨,它更适于在如果没有加载库的话,页面就不能显示的地方加载代码库,例如:
1
2
Require 'codelib.inc';
mysub();// 在codlib.inc中定义。
  • 一种或许更有效的处理header和footer的方法是加载一个单独的文件,然后调用函数来生成标准化的站点元素:
1
2
3
4
5
<? Require 'design.inc';
header();
?>
content
<? footer(); ?>
  • 如果PHP不能解析文件中用include或require包含的某些部分,将会打印出一个警告并继续执行,可以通过预先调用错误屏蔽操作符(@)来屏蔽出错警告,例如,@include\
  • 如果在PHP的配置文件php.ini中启用了allow_url_fopen选项,则可以通过提供一个URL替代本地路径来包含远程站点的文件。
1
include 'http://www.example.com/codelib.inc';
  • 如果文件名以"http://"或"ftp://"开头,则该文件会从远程站点获取加载。
  • 用include和require包含的文件可以任意命名,一般的扩展名是.php,.inc和.html,注意从Web服务器远程访问的以.php结尾的文件,将能够获取该PHP脚本的输出,直接在该文件中执行php代码,由于这个原因,建议使用.inc 文件作为主要包含代码的库文件,用.html文件作为主要包含HTML的库文件。
  • 如果一个程序使用include或require包含相同的文件两次,那么该文件会被加载两次,并且代码会执行两次或HTML被打印两次,这会导致重复定义函数或多次复制header或HTML的错位,要防止这些错误的发生,可以使用include_once和require_once,它们的行为和用include和require第一次加载文件一样,但是会忽略之后尝试加载相同文件的行为,即只加载文件一次。
  • 例如,设计页面时,我们把各个页面组件都存放在各自的文件中,它们需要知道当前用户的偏好选择(例如长宽,样式等),组件库需要使用require_once来加载用户的选择设置代码,然后页面设计师可以包含一个页面组件而不用担心用户设置代码是否已经加载过了。
  • 包含文件中的代码被导入时,它在include语句出现的地方开始有效(即作用域为include语句之后),所以被包含的代码可以看见和修改你代码中的变量,这是非常有用的,例如,一个用户跟踪库可以将当前用户名存放在全局变量$user中。
1
2
3
4
// 主页面。
include 'userprefs.inc';
echo "Hello, $user.;

  • 库能够看见和改变你的变量的能力,也会引起问题,你不得不知道库中使用的所有全局变量,以确保你不会偶然地使用它们中的一个来命名自己的变量,因此而覆盖了库中的值并干扰他的工作。
  • 如果include或require结构在一个函数中,在包含文件中的变量会成为该函数中的函数作用域变量。
  • 因为include和require是关键字而不是真正的语句,所以在条件和循环语句中必须把它们用大括号括起来:
1
2
3
for($i = 0; $i < 10; $i++){
include "repeated_element.html";
}
  • 使用get_included_files()函数可获知脚本中包含(include或require)了哪些文件,它返回一个包含每个include或require的文件名的数组,文件名都是完整的系统路径名,没有解析的文件不被包含在这个数组中。

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!