为什么在require_once中包含__DIR__?

时间:2015-09-07 18:54:09

标签: php autoloader

例如,我总是看到这样的自动加载器:

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

它与更简洁的

之间有什么区别
require_once '../vendor/autoload.php';

2 个答案:

答案 0 :(得分:3)

当前接受的答案并没有完全解释使用 __DIR__ 的原因,在我看来答案是错误的。 我将解释为什么我们真的需要这个。 假设我们有这样的文件结构

- index.php
- file3.php -(content: hello fake world)
- dir/
   - file2.php
   - file3.php - (content: hello world)

如果我们从file2.php中包含file3.php并直接运行file2.php,我们将看到输出hello world。 现在当我们在 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 cannot be included 这不是真的。它包括在内。

然而,这里有必要使用 __DIR__。如果我们在 file2.php 中使用 include __DIR__ . '/file3.php',那么即使父目录中存在另一个 file3.php,它也会包含正确的文件。

答案 1 :(得分:0)

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

https://secure.php.net/manual/en/function.set-include-path.php

然后您可以确定加载了正确的文件。