PHP include once

5

使用PHP的include_oncerequire_once相比使用类似C语言中的带头文件保护的include更有效吗?

也就是说,

include_once 'init.php';

对比

include 'init.php';

//contents of init.php
if (!defined('MY_INIT_PHP')) {
  define('MY_INIT_PHP', true);
  ...
}


5
你的代码性能受到了瓶颈的影响吗? - Chad Birch
4个回答

11

"require_once"和"include_once"通常比"require"和"include"慢一点,因为它们会检查文件是否已经被加载。

但是这种差异只在真正复杂的应用程序中才有影响,而且如果您的自动加载器编写得好的话,您不需要使用require_once/include_once。

在大多数简单的应用程序中,出于方便原因,最好使用require_once/include_once。

头文件保护方法只是混乱的代码,应该避免使用。想象一下,如果你在众多文件中忘记了其中一个文件的检查。调试可能会成为一场噩梦。

如果您的应用程序适合使用它,请使用自动加载。它的速度快,而且是最方便和清洁的方式。


2
而且...defined('MY_INIT_PHP')...也不是免费的。因此,性能问题归结为“您的php脚本解决方案是否比php内部解决方案更快”,我对绝大多数情况表示怀疑。 - VolkerK
1
@VolkerK 是的,这也是其中的原因。任何用解释性 PHP 代码编写的解决方案在定义上都比 PHP 的本地实现要慢。至少我想不到其他情况了。 - selfawaresoup

2
我认为使用include_once比在被包含文件中使用头文件保护更快,因为后者仍然需要打开和加载文件。

你说得对。他应该问是否比这个更快:if (!defined('MY_INIT_PHP')) {define('MY_INIT_PHP', true); include 'init.php';} - webbiedave

1

你可以用计时器尝试 1 万次,但我认为定义 MY_INIT_PHP 会更快一些。

说实话,这样的差异非常之小,除非你在为 Facebook 这样的网站工作,否则没有必要过于关注。


0

如果脚本内容是唯一的,我总是使用REQUIRE_ONCE。


我几乎总是使用require_once...但原因不同:如果文件丢失,require_once会给出致命错误,而include_once只会在这种情况下发出警告。否则,这两者是等效的。 - hongliang

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接