使用命名空间和自动加载器找不到类

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用命名空间和自动加载器找不到类相关的知识,希望对你有一定的参考价值。

当我尝试在服务器上运行我的php代码但在查看代码时没有突出显示时,我得到了一个非常奇怪的错误。它是我第一次使用Composers和命名空间等构建的新项目的一部分。错误是:

[18-Apr-2017 20:06:32 UTC] PHP Fatal error:  Uncaught Error: Class 'ThomasSmythLoginSystem' not found in /home/thomassm/public_html/php/functions/fncregister.php:4

文件布局:

enter image description here

LoginSystem.php

namespace ThomasSmyth;

class LoginSystem {
    private $core;
    private $builder;
    private $config;

    function __construct(){
        $this->core = new coreFunctions();
        $this->builder = new NilPortuguesSqlQueryBuilderBuilderGenericBuilder();
        $this->config = require('core.config.php');
    }
//...
}

fncRegister.php

require_once "../../vendor/autoload.php";
$LoginManager = new ThomasSmythLoginSystem();

echo $LoginManager->Register($_POST["StrSurname"], $_POST["StrForename"], $_POST["StrEmail"], $_POST["StrPassword"], $_POST["DteDoB"], $_POST["StrGender"], $_POST["StrToken"]);

composer.json

{
    "require": {
        "nilportugues/sql-query-builder": "^1.5"
    },
    "autoload": {
        "psr-4": {
            "ThomasSmyth": "php/lib/"
        }
    }
}

有没有人对可能导致此问题的原因提出任何建议,无论是代码还是服务器设置?

答案

虽然在评论中我们已经解决了这个问题,但我决定为此写一个答案。

问题已经有正确的文件路径,命名空间和composer.json配置。唯一缺少的是使用composer dump-autoload生成自动加载脚本。

此命令将生成几个包含与其命名空间配对的文件路径的autoload*.php文件。正如Composer Website所解释的那样。

以上是关于使用命名空间和自动加载器找不到类的主要内容,如果未能解决你的问题,请参考以下文章

使用命名空间自动加载 Composer 和 PSR-0 类

浅析PHP类的自动加载和命名空间

php使用命名空间时自动加载机制

使用 Symfony 1.4 的自动加载器加载命名空间类?

VSCODE 片段 PHP 自动填充命名空间

Zend Framework 1.11:如何自动加载使用命名空间的类