PSR4无法正常工作?

时间:2018-05-25 13:00:13

标签: php

显然没有找到班级。我尝试了各种各样的东西,但没有任何作用。

作曲:

"autoload": {
    "psr-4": {
        "App\\": "application/"
    }
}

文件结构: https://i.imgur.com/h9wOEqI.png

<?php

namespace App\Library\Classes;

defined('START') or exit('We couldn\'t process your request right now.');

class Application
{
    private static $libraries = array();

    public static function get($library) {
        if (isset(self::$libraries[$library]) && isset(self::$classes[$library])) {
            return self::$libraries[$library];
        }

        $fixedLibrary = str_replace('.', '/', $library);
        $file = ROOT . '/application/library/classes/' . strtolower($fixedLibrary) . '.php';

        self::$libraries[$library] = $library;

        $declared = get_declared_classes();
        $workingClass = end($declared);

        self::$libraries[$library] = new $workingClass();

        return self::$libraries[$library];
    }
}

?>

错误在这一行:

Application::get('test')->test();

然而,如果我将其更改为此,则可行:

include ROOT . '/application/Library/Application.php';
App\Library\Classes\Application::get('test')->test();

1 个答案:

答案 0 :(得分:1)

PSR4不是内置部分或PHP,您需要使用自动加载器的实现来使用此标准,例如Composer提供的。

当您安装或更新依赖项时,composer会生成相关的自动加载代码,但您可以通过命令dump-autoload直接更新它,就像@jibsteroos所说的那样。接下来,您应该在应用程序的入口点明确包含文件vendor/autoload.php

此外,有关类Application的错误消息,但您应首先添加use语句:

use App\Library\Classes\Application;

Application::get('test')->test();

或者使用完全限定的类名(带名称空间前缀的类名):

\App\Library\Classes\Application::get('test')->test();