我正在使用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
有人可以帮我吗?
答案 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)
);
供参考,见: