Php 作曲家,自动加载&;自动加载后的类调用

Php 作曲家,自动加载&;自动加载后的类调用,php,composer-php,standards,psr-4,Php,Composer Php,Standards,Psr 4,我想知道,我目前正在尝试改变我的编程风格,以使用composer及其软件包系统(我的天哪,为什么我不早点使用它?),但我想知道我正在尝试按照PSR-4标准工作 并得到以下php文件 <?php require_once(__DIR__ . '/vendor/autoload.php'); $class = new vendorname\packagename\classname; $example = new vendorname\packagename\subpackage\cla

我想知道,我目前正在尝试改变我的编程风格,以使用composer及其软件包系统(我的天哪,为什么我不早点使用它?),但我想知道我正在尝试按照PSR-4标准工作

并得到以下php文件

<?php

require_once(__DIR__ . '/vendor/autoload.php');

$class = new vendorname\packagename\classname;

$example = new vendorname\packagename\subpackage\classname2;

我目前认为是这样的,但我只是想确保根据PSR-4标准正确使用它:-)。

通常情况下,这是一种方法,但有些软件包使用不同的名称空间(就我所遇到的情况而言,主要是需要旧版支持的软件包)。因此,在
composer require
软件包并安装之后,应该检查文件中使用的名称空间。但是,是的,你是对的,因为你说话的方式就是通常的做法

通常,软件包的自述文件/网站上有一些关于如何构造对象的示例


示例:具有文件/vendor/monolog/monolog/src/monolog/Logger.php,该文件位于
monolog
命名空间中,而不是
monolog\monolog\src\monolog
命名空间中。一定要检查一下,但是包维护者/所有者网站上的大多数示例都会告诉您如何使用包。在本例中,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');

是的,这就是wierd的部分。事实上,我需要在我的应用程序中使用其他软件包,尽管有时我只需要使用
vendorname\classname
,而有时它对名称空间为何如此毫无意义。。。
<?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');