为什么要在require_once中包含__DIR__?

2022-08-30 15:39:36

例如,我总是看到自动加载机这样叫:

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

这和更简洁有什么区别

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

?


答案 1

PHP 脚本相对于当前路径(的结果)运行,而不是相对于其自身文件的路径运行。使用包含的力相对于其自身路径发生。getcwd()__DIR__

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

- file1.php
- dir/
   - file2.php
   - file3.php

如果包含如下内容:file2.phpfile3.php

include `file3.php`.

如果您直接致电,它将正常工作。但是,如果包含 ,则当前目录 () 将错误为 ,因此不能包含。file2.phpfile1.phpfile2.phpgetcwd()file2.phpfile3.php


答案 2

目前接受的答案并不能完全解释使用的原因,在我看来,答案是错误的。我将解释为什么我们真的需要这个。假设我们有一个这样的文件结构__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 worldinclude 'file3.php'file3.phpdir/file3.phphello fake worldhello world

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

但是,这是使用的必要性。如果我们在 file2.php 中使用,那么即使父目录中存在另一个 file3.php,它也将包含正确的文件。__DIR__include __DIR__ . '/file3.php'


推荐