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

时间:2017-02-15 08:14:49

标签: php namespaces autoload

我在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;

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

2 个答案:

答案 0 :(得分:4)

Laravel在其核心使用composer并拥有PSR-0 / PSR-4兼容的自动加载器。

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

答案 1 :(得分:2)

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

可能是:

  • 您已手动包含文件
  • 您使用的是自动加载器

除非它是一个小项目,否则第一个选项将很快变得无法管理,因此您最好不要探索第二个选项。正如@Koala Yeung所说,PSR-0和PSR-4是普遍接受的方式。

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

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