为什么要在require_once中包含__DIR__?
例如,我总是看到自动加载机这样叫:
require_once __DIR__ . '/../vendor/autoload.php';
这和更简洁有什么区别
require_once '../vendor/autoload.php';
?
例如,我总是看到自动加载机这样叫:
require_once __DIR__ . '/../vendor/autoload.php';
这和更简洁有什么区别
require_once '../vendor/autoload.php';
?
PHP 脚本相对于当前路径(的结果)运行,而不是相对于其自身文件的路径运行。使用包含的力相对于其自身路径发生。getcwd()
__DIR__
若要演示,请创建以下文件(和目录):
- file1.php
- dir/
- file2.php
- file3.php
如果包含如下内容:file2.php
file3.php
include `file3.php`.
如果您直接致电,它将正常工作。但是,如果包含 ,则当前目录 () 将错误为 ,因此不能包含。file2.php
file1.php
file2.php
getcwd()
file2.php
file3.php
目前接受的答案并不能完全解释使用的原因,在我看来,答案是错误的。我将解释为什么我们真的需要这个。假设我们有一个这样的文件结构__DIR__
- index.php
- file3.php -(content: hello fake world)
- dir/
- file2.php
- file3.php - (content: hello world)
如果我们包含 file2.php 中的 file3.php 并直接运行 file2.php,我们将看到输出 。现在,当我们在 index.php 中包含 file2.php 时,代码将开始执行,并且它将再次看到 file2(使用 file3),首先,执行将在当前执行目录(该目录与存在 index.php 的目录)中查找 file3。由于file3.php存在于该目录中,因此它将包含该目录而不是,我们将看到输出而不是.hello world
include 'file3.php'
file3.php
dir/file3.php
hello fake world
hello world
如果 file3.php 不存在于同一目录中,那么它将包含正确的文件,这使得接受的答案无效,因为它声明哪个不成立。它包括在内。dir/file3.php
file3.php cannot be included
但是,这是使用的必要性。如果我们在 file2.php 中使用,那么即使父目录中存在另一个 file3.php,它也将包含正确的文件。__DIR__
include __DIR__ . '/file3.php'