自动加载后的作曲家,自动加载和类调用

时间:2018-08-09 17:32:31

标签: php composer-php standards psr-4

我想知道,我目前正在尝试更改编程风格以与作曲家及其软件包系统一起使用(我的天哪,为什么我不早使用它?),但我想知道我正在尝试遵循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标准正确使用它:-)。

2 个答案:

答案 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命令时。此文件将更新。