PSR-4 自动加载在自定义库的作曲家中如何工作?
How does PSR-4 autoloading work in composer for custom libraries?
根据我对 PHP 中命名空间如何工作的理解,我使用以下目录结构:
project_root
app/
| lib/
| | MyCompany/
| | | Utility/
| | | | Logger.php
| | | Core/
| | | | User.php
vendor/
composer/
symfony/
guzzle/
bootstrap.php
composer.json
根据 PSR-4 规范,完全限定的 class 名称具有以下形式:
\<NamespaceName>(\<SubNamespaceNames>)*\<ClassName>
问题 1:
根据我上面的目录结构,下面的假设是否正确?
- 命名空间名称 = 我的公司
- SubNamespaceNames = 实用程序 |核心
- 类名 = 记录器 |用户
问题二:
如果我的 bootstrap.php 文件包含以下内容:
<?php
require 'vendor/autoload.php';
我如何 configure the 'autoload' composer.json 部分自动加载 MyCompany 目录中的 classes?这样我就可以在 bootstrap.php
中创建一个 Logger 实例
取自您链接的文档:
{
"autoload": {
"psr-4": {
"MyCompany\": "app/lib/MyCompany/",
}
}
}
这是不言自明的,它只是告诉自动加载器 app/lib/MyCompany
是 MyCompany\
命名空间的根。
然后您就可以将 class 用作 \MyCompany\Utility\Logger
。
请注意,在 PSR-4 中,与 PSR-0 不同,您通常会从目录结构中省略 MyCompany
,而只使用 app/lib/
.
根据我对 PHP 中命名空间如何工作的理解,我使用以下目录结构:
project_root
app/
| lib/
| | MyCompany/
| | | Utility/
| | | | Logger.php
| | | Core/
| | | | User.php
vendor/
composer/
symfony/
guzzle/
bootstrap.php
composer.json
根据 PSR-4 规范,完全限定的 class 名称具有以下形式:
\<NamespaceName>(\<SubNamespaceNames>)*\<ClassName>
问题 1:
根据我上面的目录结构,下面的假设是否正确?
- 命名空间名称 = 我的公司
- SubNamespaceNames = 实用程序 |核心
- 类名 = 记录器 |用户
问题二:
如果我的 bootstrap.php 文件包含以下内容:
<?php
require 'vendor/autoload.php';
我如何 configure the 'autoload' composer.json 部分自动加载 MyCompany 目录中的 classes?这样我就可以在 bootstrap.php
中创建一个 Logger 实例取自您链接的文档:
{
"autoload": {
"psr-4": {
"MyCompany\": "app/lib/MyCompany/",
}
}
}
这是不言自明的,它只是告诉自动加载器 app/lib/MyCompany
是 MyCompany\
命名空间的根。
然后您就可以将 class 用作 \MyCompany\Utility\Logger
。
请注意,在 PSR-4 中,与 PSR-0 不同,您通常会从目录结构中省略 MyCompany
,而只使用 app/lib/
.