请记住,使用 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__ 的设置)
尝试和捕获 - 不要被“致命 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 前缀“@”,它仍然会被捕获。