'use' 如何知道从哪里开始搜索文件?

How does 'use' know where to start searching for the file?

我在 Laravel 中创建了一个控制器,它使用以下 use

use Illuminate\Http\Request;

控制器如何知道在哪里可以找到 Request? 控制器本身位于:

app\Http\Controllers\LoginController.php

但是请求在:

vendor\laravel\framework\src\Illuminate\Http\Request.php


那么为什么 use:

use Illuminate\Http\Request;

...而不是:

use vendor\laravel\framework\src\Illuminate\Http\Request;

这也行吗? 控制器如何知道从哪里开始搜索?

Laravel 使用 composer in its core and have a PSR-0 / PSR-4 兼容的自动加载器。

PSR-0 和 PSR-4 标准规定了如何根据命名空间解析文件夹。 laravel 的 Autoloader, through PHP's Autoloading 有助于解析并包含正确的文件。

它基于您的应用程序已经通过 class 文件中的 namespace 声明提供给 PHP 的信息——通常是通过自动加载器。默认情况下,找不到您的 classes。

可能是:

  • 您已手动包含文件
  • 您正在使用自动加载器

除非它是一个小项目,否则第一个选项很快就会变得难以管理,因此您最好探索第二个选项。正如@Koala Yeung 提到的,PSR-0 和 PSR-4 是普遍接受的方式。

您使用 spl_autoload_register (http://php.net/manual/en/function.spl-autoload-register.php) 注册了一个自动加载器,这样您就可以编写一个在每次创建新对象时调用的函数。

如果您 运行 var_dump(spl_autoload_functions()); 您将看到自动加载器 Laravel 已设置。