命名空间如何链接到文件夹?

时间:2018-10-22 16:54:40

标签: php phpstorm

(我确实研究了名称空间的工作原理,但人们从功能PoV而非物理上解释了它)

我对Laravel有问题,但这不是真正的问题: 在 blog / app 文件夹中,我有以下代码

<?php
namespace App;

use Illuminate\Notifications\Notifiable;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
//...
?>

例如,引用的第三个文件位于 \ blog \ vendor \ laravel \ framework \ src \ Illuminate \ Foundation \ Auth

它到底是怎么算出 blog \ vendor \ laravel \ framework \ src 部分的?

我用PhpStorm尝试了“右键单击转到声明”,它将我链接到正确的文件。怎么知道的 我使用WampServer打开了 app 而不是 vendor ...

注意:之所以问这个原因是因为当我尝试打开该文件时,在[...] 中找不到 Illuminate \ Foundation \ Auth \ User'类。 (即使PhpStorm找到了!)

1 个答案:

答案 0 :(得分:3)

没有确定的方法来管理名称空间和物理文件之间的这种关系,因为它们在技术上并不相关。但是,为了减轻您所注意到的问题,创建了PSR-4标准,该标准定义了将命名空间绑定到文件系统文件的准则。

在这种情况下,Composer自动维护PSR-4映射。 Illuminate软件包应具有composer.json,该变量告诉Composer在何处可以找到Illuminate名称空间的文件。运行composer install时,Composer会扫描所有相关的composer.json文件,并从所有这些依赖关系中构建vendor/autoload.php。因此,您要做的就是包括vendor/autoload.php,您可以神奇地访问依赖列表中的所有内容。