PSR-4没有加载我的项目类

时间:2017-08-28 05:22:43

标签: php composer-php autoload psr-4

我正在使用Composer的PSR-4来自动加载类,但它不会加载我的类。 每次我尝试使用我的一个类时,应用程序都会在没有任何错误的情况下死掉,即使它应该显示错误。

这是我的文件结构:

/
│   composer.lock
│   composer.json
│   index.php
├───src
│       Array.php
│       File.php
├───vendor
        ...

composer.json - 自动加载部分

"autoload": {
    "psr-4": {
        "FileManager\\": "src"
    }
}

开始index.php

<?php

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

var_dump(class_exists('Array'), class_exists('Array', false));
var_dump(class_exists('File'), class_exists('File', false));

它抛弃了这个:

bool(false)
bool(false)
bool(false)
bool(false)

如果我添加

use FileManager\Array;
它会立即死亡。如果我添加

use FileManager\File;

它不会死,但它也不会识别File类。

我跑了

$ composer dumpautoload

有人可以帮我吗?

1 个答案:

答案 0 :(得分:0)

问题在于您将string传递给class_exists()

如果您使用string值来引用类名,则需要使用完全限定的类名

<?php

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

var_dump(
    class_exists('FileManager\ArrayUtil'),
    class_exists('FileManager\File')
);

或者,您可以使用class关键字(至少需要PHP 5.5):

<?php

use FileManager\ArrayUtil;
use FileManager\File;

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

var_dump(
    class_exists(ArrayUtil::class),
    class_exists(File::class)
);

供参考,见: