记住,在使用 require 时,它是一个语句,而不是一个函数。没有必要写
<?php
require('somefile.php');
?>
下面的
<?php
require 'somefile.php';
?>
是首选,它将阻止您的同行对您进行困扰和关于 require 真正是什么的琐碎对话。
(PHP 4, PHP 5, PHP 7, PHP 8)
require
与 include 相同,区别在于如果失败,它还会产生一个致命级的 E_COMPILE_ERROR
错误。换句话说,它会停止脚本的执行,而 include 只会发出一个警告(E_WARNING
),允许脚本继续执行。
有关工作原理,请参阅 include 文档。
记住,在使用 require 时,它是一个语句,而不是一个函数。没有必要写
<?php
require('somefile.php');
?>
下面的
<?php
require 'somefile.php';
?>
是首选,它将阻止您的同行对您进行困扰和关于 require 真正是什么的琐碎对话。
如果包含的文件返回一个值,您可以从 require() 中获取它,例如
foo.php
<?php
return "foo";
?>
$bar = require("foo.php");
echo $bar; // 等于 "foo"
始终使用 __DIR__ 来定义相对于当前 __FILE__ 的路径。
(或其他基于 __DIR__/__FILE__ 的设置)
try & catch - 不要被“致命 E_COMPILE_ERROR” 这个词语所迷惑 - 它仍然只是一个实现 Throwable 的内部错误 - 它可以被捕获
<?php
try {
require(__DIR__ . '/something_that_does_not_exist');
} catch (\Throwable $e) {
echo "This was caught: " . $e->getMessage();
}
echo " End of script.";
?>
请注意,这仍然会发出一个警告“无法打开流:没有此文件或目录...”...除非您在 require 前加上“@” - 我强烈建议不要这样做,因为它会忽略/抑制任何诊断错误(除非您已指定 set_error_handler())。但即使您在 require 前加上“@”,它仍然会被捕获。