Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/251.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Composer自动加载问题:未加载所有文件_Php_Composer Php - Fatal编程技术网

Php Composer自动加载问题:未加载所有文件

Php Composer自动加载问题:未加载所有文件,php,composer-php,Php,Composer Php,我已经构建了自己的web应用程序一段时间了,但是由于PHP中的一个致命错误,我完全碰上了墙 短篇故事:我正在处理项目的登录/用户部分login.php处理登录信息,而student.php处理帐户信息 在尝试完成doLogin时,我遇到了一个致命错误,即student::getProfile()是一个“未定义的方法”student::getProfile()作为validate()的一部分在login类中调用 任何帮助都将不胜感激!谢谢:) 编辑:在@deceze的帮助下,我已经能够将问题缩小到

我已经构建了自己的web应用程序一段时间了,但是由于PHP中的一个致命错误,我完全碰上了墙

短篇故事:我正在处理项目的登录/用户部分
login.php
处理登录信息,而
student.php
处理帐户信息

在尝试完成
doLogin
时,我遇到了一个致命错误,即
student::getProfile()
是一个“未定义的方法”
student::getProfile()
作为
validate()
的一部分在
login
类中调用

任何帮助都将不胜感激!谢谢:)

编辑:在@deceze的帮助下,我已经能够将问题缩小到Composer没有自动加载所有类的事实;只有一些。有人能帮忙吗

编辑2:我选中了由Composer生成的
自动加载\u classmap.php
,并列出了我所有的核心类和模型!如果它们列在类映射中,为什么Composer没有加载它们


项目目录

application/
    config/
    controller/
    core/
        (core items such as auth, app, view rendering + view controller)
    model/
        (speciality functions such as login, registration + user)
    view/
public/
    index.php
    .htaccess
vendor/
    autoload.php
composer.json
.htaccess

note: /public/index.php calls `require '../vendor/autoload.php';`

composer.json

"autoload": {
    "psr-4": {
        "": [
            "application/core/",
            "application/model/"
        ]
    }
}

在经过了大量乏味的搜索之后,我在自己的方式中发现了错误——这真是太愚蠢了

我有一个名为
student
的控制器,同时还有一个名为
student
的模型,因此我无意中试图调用一个技术上已经被调用的类。因此,它在第一个
student
类中查找函数,而不是实际包含该特定函数的另一个类

Composer没有意识到是否已经存在一个预先声明了该名称的类,只是在PHP错误日志中没有任何条目的情况下对其进行否定

为了避免这个错误——以及将来任何进一步的类名混淆——我决定对
core
类和
model
类使用单独的名称空间。这将这些类划分为“子部分”,这样就允许使用命名相同的类(尽管在不同的名称空间中)



在开始时将student.php文件包含在login.php中。@deceze
调用login.php中未定义的方法student::getProfile()
应该可以。唯一的解释是没有包含该文件。只需通过添加
回显“我被包含!”
来确认是否包含该文件即可。唯一的其他解释是名称空间,和/或代码中某个地方的不可见字符;i、 类或函数的名称实际上是不同的。因此,您已将问题缩小为自动加载器的问题。请相应地重写问题,以关注这一点,这不会在评论中得到解决。