Composer,自动加载 & class 自动加载后调用
Composer, autoloading & class calling after autoloading
我想知道,我目前正在尝试改变我的编程风格以使用 composer 及其包系统(天哪,我为什么不早点使用它?)但我想知道我正在尝试按照PSR-4 标准。
并得到以下php文件
<?php
require_once(__DIR__ . '/vendor/autoload.php');
$class = new vendorname\packagename\classname;
$example = new vendorname\packagename\subpackage\classname2;
与 Composer 和 PSR-4 标准一起使用是好的做法吗?
其中 类 存在于:
- /vendor
-- /vendorname
--- /packagename
--- /src
---- classname.php
---- /subpackage
----- classname2.php
我目前认为是,但我只是想确保我根据 PSR-4 标准正确使用它:-)。
通常这是要走的路,但有些包使用不同的命名空间(就我所遇到的而言,主要是需要旧版支持的包)。因此,在 composer require
包安装完成后,您应该检查文件中使用的命名空间。但是,是的,你是对的,因为你说的方式就是通常的做法。
通常包的 readme/website 也有一些关于如何构建对象的示例。
示例:Monolog logger package 有一个文件 /vendor/monolog/monolog/src/Monolog/Logger.php,它位于 Monolog
命名空间中,而不是 Monolog\Monolog\Src\Monolog
命名空间中。请务必检查一下,但大多数时候包 maintainer/owner 网站上的示例会告诉您如何使用该包。在此示例中,Github 上的自述文件告诉您如何使用该包。
大多数软件包都包含引用其命名空间的自述文件。您可以使用该命名空间访问 类。如果找不到,可以从 'your_project_root/vendor/vendor_name/package_name/composer.json'.
查看
"autoload": {
"psr-4": {"Monolog\": "src/Monolog"}
},
对于此示例,'Monolog' 是命名空间,这是遵循 psr 标准的最佳方式。
<?php
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
// create a log channel
$log = new Logger('name');
$log->pushHandler(new StreamHandler('path/to/your.log', Logger::WARNING));
// add records to the log
$log->warning('Foo');
$log->error('Bar');
您可以在 https://www.php-fig.org/psr/
中看到所有这些标准
此外,您还可以查看此包如何加载到 'autoload_psr4.php' 位于
'your_project_root/vendor/composer/autoload_psr4.php'
当您 运行 composer require, composer update or composer dump-autoload
命令时。此文件将更新。
我想知道,我目前正在尝试改变我的编程风格以使用 composer 及其包系统(天哪,我为什么不早点使用它?)但我想知道我正在尝试按照PSR-4 标准。
并得到以下php文件
<?php
require_once(__DIR__ . '/vendor/autoload.php');
$class = new vendorname\packagename\classname;
$example = new vendorname\packagename\subpackage\classname2;
与 Composer 和 PSR-4 标准一起使用是好的做法吗?
其中 类 存在于:
- /vendor
-- /vendorname
--- /packagename
--- /src
---- classname.php
---- /subpackage
----- classname2.php
我目前认为是,但我只是想确保我根据 PSR-4 标准正确使用它:-)。
通常这是要走的路,但有些包使用不同的命名空间(就我所遇到的而言,主要是需要旧版支持的包)。因此,在 composer require
包安装完成后,您应该检查文件中使用的命名空间。但是,是的,你是对的,因为你说的方式就是通常的做法。
通常包的 readme/website 也有一些关于如何构建对象的示例。
示例:Monolog logger package 有一个文件 /vendor/monolog/monolog/src/Monolog/Logger.php,它位于 Monolog
命名空间中,而不是 Monolog\Monolog\Src\Monolog
命名空间中。请务必检查一下,但大多数时候包 maintainer/owner 网站上的示例会告诉您如何使用该包。在此示例中,Github 上的自述文件告诉您如何使用该包。
大多数软件包都包含引用其命名空间的自述文件。您可以使用该命名空间访问 类。如果找不到,可以从 'your_project_root/vendor/vendor_name/package_name/composer.json'.
查看"autoload": {
"psr-4": {"Monolog\": "src/Monolog"}
},
对于此示例,'Monolog' 是命名空间,这是遵循 psr 标准的最佳方式。
<?php
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
// create a log channel
$log = new Logger('name');
$log->pushHandler(new StreamHandler('path/to/your.log', Logger::WARNING));
// add records to the log
$log->warning('Foo');
$log->error('Bar');
您可以在 https://www.php-fig.org/psr/
中看到所有这些标准此外,您还可以查看此包如何加载到 'autoload_psr4.php' 位于
'your_project_root/vendor/composer/autoload_psr4.php'
当您 运行 composer require, composer update or composer dump-autoload
命令时。此文件将更新。