Composer autoload完整的例子?

PiT*_*ber 5 php autoload composer-php

我试图把所有 的 和平 放在一起,我发现在作曲家中自动加载一个类,但我无法使它工作.我看到的每个例子都缺少一些部分.基本上它归结为两行4行:

的index.php

$loader = require 'vendor/autoload.php';
$loader->add('Vendor\\', __DIR__.'/../app/');
new Vendor_Package_Obj();
Run Code Online (Sandbox Code Playgroud)

应用程序/销售商/包装/ Obj.php

class Obj {}
Run Code Online (Sandbox Code Playgroud)

我还试过psr-4以及所有可供组合的文件夹和名称的供应商包Obj?但没有运气找到有效的解决方案.

如何使用任何这些标准使用composer自动加载文件?

edi*_*igu 11

根据PSR-4,完全限定的类名必须具有顶级命名空间名称,也称为"供应商名称空间",并且下划线在完全限定类名的任何部分中都没有特殊含义.

试试这个:

cd ~
mkdir -p testproj/src/MyApp/Package
cd testproj
composer init && composer update
Run Code Online (Sandbox Code Playgroud)

使用以下内容创建index.php:

<?php
$loader = require 'vendor/autoload.php';
$loader->add('MyApp\\', __DIR__.'/src/');
$a = new MyApp\Package\Obj();
var_dump($a);
Run Code Online (Sandbox Code Playgroud)

并把Obj类(src/MyApp/Package/Obj.php):

<?php
namespace MyApp\Package;

class Obj
{}
Run Code Online (Sandbox Code Playgroud)

现在,当您运行代码时:

php index.php
Run Code Online (Sandbox Code Playgroud)

你应该把它作为输出:

class MyApp\Package\Obj#2 (0) {
}
Run Code Online (Sandbox Code Playgroud)

目录脚手架也应如下所示:

testproj
??? composer.json
??? index.php
??? src
?   ??? MyApp
?       ??? Package
?           ??? Obj.php
??? vendor
    ??? autoload.php
    ??? composer
        ??? ClassLoader.php
        ??? autoload_classmap.php
        ??? autoload_namespaces.php
        ??? autoload_psr4.php
        ??? autoload_real.php
Run Code Online (Sandbox Code Playgroud)