什么更好要求(dirname(__FILE__)。'/'.'myParent.php') 而不是仅仅 require('myParent.php')?

2022-08-30 21:37:45

许多著名的PHP脚本(包括WordPress)都使用,而不仅仅是在当前运行的脚本的同一目录中包含文件。dirname(__FILE__).'/myParent.php''myParent.php'

它们不是一回事吗?为什么你更喜欢打字?

谢谢。


答案 1

PHP 需要知道文件的绝对路径。 已经 是绝对路径,但需要使用include_path中的给定路径进行查找,以获取绝对路径并找到文件。更好的选择是:dirname(__FILE__).'/myParent.php''myParent.php''./myParent.php'

但是,显式使用比让 PHP 始终检查每个包含的当前目录更有效。include './file'


答案 2

除了性能提高(在大多数情况下,这可能是预优化*)之外,它还可以防止环境的 PHP 配置没有当前目录 () 作为包含路径的一部分的(非常奇怪的)情况。.

* 使用需要查找的路径与不需要查找的相对路径的基准。每次测试超过 100000 次迭代includeinclude_path

结果

include("include.php"):   8.3664200305939s
include("./include.php"): 8.3511519432068s

(8.3664200305939 - 8.3511519432068) / 100000 = 0.000000152680874s

除非您包含数百或数千个文件,否则0.0000001s充其量可以忽略不计。

测试代码

define("MAX", 100000);

ob_start();
$i = MAX;
$_t = microtime(true);
do {
    include("include.php");
} while ( --$i );
$_t = microtime(true) - $_t;
ob_end_clean();

echo "include(\"include.php\"):  {$_t}s\n";

ob_start();
$i = MAX;
$_t = microtime(true);
do {
    include("./include.php");
} while ( --$i );
$_t = microtime(true) - $_t;
ob_end_clean();

测试在 2.16GHz Macbook 10.5.8 和 PHP 版本 5.2.9(www.entropy.ch 版本 7)上进行


推荐