我正在学习使用psr-4自动加载我的calss,但我没有运气,这是我的文件夹结构

下面是我的"Employee.php“中的代码
namespace app\Employee;
class Employee
{
public function __construct(){
echo "hello employee";
}
}在我的index.php中
use app\Employee;
$emp = new Employee;这是我的composer.json
{
"autoload": {
"psr-4": {
"Employee\\":"app/Employee"
}
}
}发布于 2015-10-05 04:32:38
您当前的autoloader期望"Employee“名称空间映射到"app/Employee/”目录中。
在您的设置中,您需要添加index.php
use Employee\Employee;
$emp = new Employee();Employee.php的实际名称空间为:
namespace Employee;
class Employee {}发布于 2015-10-05 05:10:00
变化
use app\Employee;
$emp = new Employee;至:
use Employee\Employee;
$emp = new Employee();发布于 2015-10-06 01:35:18
从Employee.php中的代码
namespace app\Employee;如果你想访问这个类,就必须使用这个命名空间。
Composer中的PSR-4如下所示:
"autoload":{"psr-4": { "Namespace\Prefix":"a/path"}}当加载类"Namespace\ Prefix \ class“时,Composer将看到PSR-4条目,并比较加载的类是否以该前缀开头。确实是这样!现在,它从类名中删除检测到的前缀,并将其余部分视为相对于"a/ path“的路径和文件名。
因此,该类的其余部分是" class ",因为没有留下反斜杠,所以它直接是文件名"Class.php“(注意文件名的大写)。此文件在"a/path/Class.php“中搜索。
对于您的情况,您几乎做对了所有事情-唯一的事情是:您在composer.json中的名称空间前缀不是Employee\ -您在上面的代码中给出了正确的前缀。
https://stackoverflow.com/questions/32936017
复制相似问题