【发布时间】:2011-05-14 23:24:29
【问题描述】:
我是第一次编写 PHP 应用程序(除了玩具和练习),我不明白为什么 PHP 会同时包含 include 和 require 构造。
在你写一个解释两者之间差异的答案之前,让我先说我确实理解差异 - include 产生一个警告并继续前进,require 产生一个致命错误。我的问题是:您什么时候想包含但不需要文件?
也许这是我的想象力失败,但我的应用程序中似乎没有任何文件,如果它们不存在,我不想尖叫。奇怪的是,这不让我想使用require,因为似乎无法正确处理失败的require,所以我使用了一个辅助函数(警告:空气代码):
public static function include($filename) {
if (is_readable($filename)) {
if (!@include($filename)) {
throw new FileNotFoundException("File deleted after readable check");
}
} else {
throw new FileNotFoundException("File missing or unreadable");
}
}
我想我要问的是:
- 您真正希望可选在应用程序中包含哪些类型的文件?
- 无论您希望文件是必需还是可选,您为什么不直接在函数中处理它,比如我编写的代码的修改版本上面?
【问题讨论】:
-
@Gordon -- 我会链接到你的答案,我发现它比接受的答案更有用:) stackoverflow.com/questions/2418473/…
-
@Agent 可能的示例:
require 'defaultSettings.php'; include 'userProvidedOverloadForDefaultSettings.php';基本上,可以包括任何覆盖现有值或在未给出时不会立即破坏您的应用程序的内容。我同意大多数时候你会想要使用require。 -
@Agent IMO,尝试处理无法处理的情况或在无论如何都无法捕获时抛出异常是没有意义的。缺少核心库是无法处理的。你能做的最好的就是告诉用户。但为此,您可以只使用
register_shutdown_function和error_get_last()来查看是否有错误并发送一个500 标题和一个漂亮的页面。但是话又说回来,是的,对于那些无法处理的情况,您也可以使用 include 和set_exception_handler。我不会想太多。务实。使用有效的方法。 -
@Gordon:这是有道理的。在他的回答下与@deceze 进行了一番交谈后,我意识到我的整个问题是多么愚蠢。如果它达到了一个重要的类或模板文件完全丢失的地步,要么我搞砸了,我需要承认和道歉,要么服务器发生了一些疯狂的事情,在这种情况下,它超出了我的控制范围,我有托管公司的完美替罪羊;)我真的需要接受“现在有效”的理念。我不断陷入过早优化和建筑航天的陷阱。
标签: php include language-design require