当前位置: 首页 > 面试题库 >

为什么require_once不好用?

洪河
2023-03-14
问题内容

我所读到的有关更好的PHP编码实践的所有内容都一直在说不要使用,require_once因为速度太快。

为什么是这样?

做相同的事情的正确/更好的方法是什么require_once?如果有关系,我正在使用PHP 5。


问题答案:

require_once并且include_once都要求系统会记录本已被列入什么/需要的。每个*_once呼叫都意味着检查该日志。因此,肯定
有一些 额外的工作要做,但足以损害整个应用程序的速度吗?

…我真的对此表示怀疑…除非您使用的是 真正的 旧硬件或经常这样做,否则 不可以

如果您 进行数千次操作*_once,则可以轻松地自己完成工作。对于简单的应用程序,只是确保你只包括一次 应该
足够了,但如果你仍然得到重新定义错误,你可以是这样的:

if (!defined('MyIncludeName')) {
    require('MyIncludeName');
    define('MyIncludeName', 1);
}

我个人会坚持这些*_once说法,但在愚蠢的百万通过基准上,您会发现两者之间的区别:

                php                  hhvm
if defined      0.18587779998779     0.046600103378296
require_once    1.2219581604004      3.2908599376678

慢10-100倍,require_once奇怪的require_oncehhvm。同样,这仅在您运行*_once数千次时才与您的代码相关。

<?php // test.php

$LIMIT = 1000000;

$start = microtime(true);

for ($i=0; $i<$LIMIT; $i++)
    if (!defined('include.php')) {
        require('include.php');
        define('include.php', 1);
    }

$mid = microtime(true);

for ($i=0; $i<$LIMIT; $i++)
    require_once('include.php');

$end = microtime(true);

printf("if defined\t%s\nrequire_once\t%s\n", $mid-$start, $end-$mid);
<?php // include.php

// do nothing.


 类似资料:
  • 问题内容: 对这个重复的问题表示歉意,但是我还没有找到满意的答案。大多数问题都有自己的特定用例: Java- 替代thread.sleep在Java中,是否有任何更好的替代方法来跳过/避免使用Thread.sleep(1000)? 我的问题是针对非常通用的用例。等待条件完成。做一些操作。检查条件。如果条件不成立,请等待一段时间,然后再次执行相同的操作。 例如,考虑一种通过调用其createAPI表

  • 问题内容: 建议不要中使用。 可以分享原因,以便下次避免这样做吗? 问题答案: 因为它将很多东西放到你的命名空间中(可能会遮盖以前导入的其他对象,你对此一无所知)。 因为你不完全知道要导入的内容,而且不容易找到从哪个模块导入的特定内容(可读性)。 因为你不能使用像静态检测代码中的错误之类的出色工具。

  • 所以我理解为什么从异步返回空洞通常没有意义,但我遇到了一种我认为完全有效的情况。请考虑以下人为的示例: 我意识到这是一个不寻常的例子,但我试图使其简单化和更普遍化。有人能向我解释为什么这是可怕的代码,以及我如何修改它以正确遵循约定吗? 谢谢你的任何帮助。

  • 问题内容: 我们都知道 单身 人士有多 糟糕 ,因为他们隐藏了依赖关系以及其他原因。 但是在一个框架中,可能有许多对象只需要实例化一次,并可以 从任何地方 调用(记录器,数据库等)。 为了解决这个问题,有人告诉我使用所谓的“对象管理器”(或诸如symfony之类的服务容器),在内部存储对服务(记录器等)的所有引用。 但是,为什么服务提供者不像单纯的Singleton那样糟糕? 服务提供者也隐藏了依

  • 问题内容: 我正在观看有关Java的演示,有一次讲师说: “可变性还可以,共享很好,共享可变性是魔鬼的工作。” 他指的是以下代码,他认为这是“极度坏习惯”: 然后,他着手编写应使用的代码,即: 我不明白为什么第一段代码是“不良习惯”。对我来说,他们都实现了相同的目标。 问题答案: 当执行并行处理时,该问题就起作用了。 在使用流时,这不必要地使用了 副作用, 但如果正确使用,并非所有副作用都不好,因

  • 我正在看一个关于Java的演讲,有一次,讲师说: “可变是可以的,共享是好事,共享可变是魔鬼的工作。” 他所指的就是以下代码,他认为这是一个“极其糟糕的习惯”: 然后,他继续编写应该使用的代码,即: 我不明白为什么第一段代码是“坏习惯”。对我来说,他们都达到了相同的目标。