显然没有找到班级。我尝试了各种各样的东西,但没有任何作用。
作曲:
"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();
答案 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();