'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 已设置。
我在 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 已设置。