Php 为什么在require\u中只包含一次uuu DIR\uuuu?

Php 为什么在require\u中只包含一次uuu DIR\uuuu?,php,autoloader,Php,Autoloader,例如,我经常看到自动加载器的名称如下: require_once __DIR__ . '/../vendor/autoload.php'; include `file3.php`. 这和更简洁的有什么区别 require_once '../vendor/autoload.php'; ?对于,可以设置一些PHP自动搜索的文件夹。当包含具有相对路径的文件时,将在所有文件夹中搜索。最好定义真实路径,以防止加载错误文件时出现错误 然后可以确保加载了正确的文件 PHP脚本相对于当前路径(getcw

例如,我经常看到自动加载器的名称如下:

require_once __DIR__ . '/../vendor/autoload.php';
include `file3.php`.
这和更简洁的有什么区别

require_once '../vendor/autoload.php';

对于,可以设置一些PHP自动搜索的文件夹。当包含具有相对路径的文件时,将在所有文件夹中搜索。最好定义真实路径,以防止加载错误文件时出现错误


然后可以确保加载了正确的文件

PHP脚本相对于当前路径(getcwd()的结果)运行,而不是相对于它们自己文件的路径运行。使用
\uuuuu DIR\uuuu
强制包含相对于其自身路径发生

要演示,请创建以下文件(和目录):

如果
file2.php
包括
file3.php
如下:

require_once __DIR__ . '/../vendor/autoload.php';
include `file3.php`.

如果您直接调用
file2.php
,它就可以正常工作。但是,如果
file1.php
包含
file2.php
,则当前目录(
getcwd()
)对于
file2.php
,将是错误的,因此
file3.php
不能包含在内。

当前接受的答案没有充分解释使用
\uu DIR\uuu
的原因,我认为答案是错误的。 我要解释为什么我们真的需要这个。 假设我们有这样一个文件结构

- index.php
- file3.php -(content: hello fake world)
- dir/
   - file2.php
   - file3.php - (content: hello world)
如果我们从file2.php中包含file3.php并直接运行file2.php,我们将看到输出
helloworld
。 现在,当我们在index.php中包含file2.php时,当代码开始执行时,它将再次看到file2使用
include'file3.php'
包含file3,首先执行将在当前执行目录中查找file3(与index.php所在的目录相同)…因为file3.php存在于该目录中,它将包括
file3.php
而不是
dir/file3.php
,我们将看到输出
hello fake world
而不是
hello world

如果file3.php不存在于同一目录中,那么它将包含正确的
dir/file3.php
文件,这使得接受的答案无效,因为它声明
file3.php不能被包含
,这是不正确的。包括在内


然而,使用
\uuuu DIR\uuuu
的必要性来了。如果我们使用
include\uuuuuu DIR\uuuuuuuuuu/file2.php中的file3.php“
,则即使父目录中存在另一个file3.php,它也会包含正确的文件。

虽然这也是正确的,但这并不是最重要的原因。