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