我想知道,我目前正在尝试更改编程风格以与作曲家及其软件包系统一起使用(我的天哪,为什么我不早使用它?),但我想知道我正在尝试遵循PSR- 4标准。
并获得了以下php文件
<?php
require_once(__DIR__ . '/vendor/autoload.php');
$class = new vendorname\packagename\classname;
$example = new vendorname\packagename\subpackage\classname2;
与作曲家和PSR-4标准一起使用是否是一种好的做法?
这些类存在的位置:
- /vendor
-- /vendorname
--- /packagename
--- /src
---- classname.php
---- /subpackage
----- classname2.php
我目前正在考虑,但是我只是想确保我根据PSR-4标准正确使用它:-)。
答案 0 :(得分:0)
通常这是要走的路,但是有些软件包使用不同的名称空间(据我所知,主要是需要旧有支持的软件包)。因此,在composer require
软件包及其安装之后,应检查文件以了解所使用的名称空间。但是,是的,您是对的,因为您的讲话方式通常是这样。
通常,程序包的自述文件/网站上还提供了一些有关如何构造其对象的示例。
示例:Monolog logger package的文件/vendor/monolog/monolog/src/Monolog/Logger.php位于Monolog
命名空间中,而不位于Monolog\Monolog\Src\Monolog
命名空间中。只需确保检查一下即可,但是大多数情况下,软件包维护者/所有者网站上的示例将告诉您如何使用软件包。在此示例中,Github上的自述文件告诉您如何使用该软件包。
答案 1 :(得分:0)
大多数软件包都包含引用其名称空间的自述文件。您可以使用该名称空间访问类。如果找不到,则可以从“ 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
命令时。此文件将更新。