Autoloader 函数试图包含一个内置的 PHP class
Autoloader function tries to include a built-in PHP class
我创建了一个 class 用于数据库操作。
此 class 继承自 PDO class。
使用 class 时出现错误 Fatal error: Class 'app\lib\PDO' not found
。
请注意,我在继承自 PDO 时使用了反斜杠 \
。
class Database extends \PDO {
private static $object;
private static $pdo;
function __construct() {
$db_config = Config::getItem('database');
try {
$dsn = "mysql:host=" . $db_config['db_host'] . ";dbname=" . $db_config['db_name'] . ";charset=" . $db_config['db_charset'] . "";
parent::__construct($dsn, $db_config['db_username'], $db_config['db_password']);
} catch (\PDOException $err) {
trigger_error($err->getMessage(), E_USER_ERROR);
}
}
......
您可以通过检查文件是否存在来解决这个问题,这里是您可以在所有自动加载情况下使用的通用代码,不需要“\”
spl_autoload_register(function($class){
if(file_exists(SITE_PATH . 'app/classes/'. $class .'.php')){
require_once SITE_PATH . 'app/classes/'. $class .'.php';
}elseif(file_exists(SITE_PATH . 'app/another-folder/'. $class .'.php')){
require_once SITE_PATH . 'app/another-folder/'. $class .'.php';
}
});
您尝试在 错误的 命名空间中加载 PDO
。它不在我们提供的代码中。正如您在错误 Fatal error: Class 'app\lib\PDO' not found
中看到的,它尝试在命名空间 app\lib
中加载 PDO
class。您可能知道,它不在该名称空间中。
为了解决这个问题,您可以将其放在文件顶部:
use \PDO;
或者您需要在每次使用 PDO
class 之前放置 \
。要了解有关命名空间的更多信息,请查看 documentation。
PDO
是一个"normal"class,它有一个命名空间声明,如果你不在那个命名空间内加载它,它不会被发现。就像任何其他 class。同样,在您的情况下,您将它放在 app\lib
命名空间中。因此,您必须在 \PDO
命名空间中使用 PDO
class,因为那是 class 所在的命名空间。
我创建了一个 class 用于数据库操作。
此 class 继承自 PDO class。
使用 class 时出现错误 Fatal error: Class 'app\lib\PDO' not found
。
请注意,我在继承自 PDO 时使用了反斜杠 \
。
class Database extends \PDO {
private static $object;
private static $pdo;
function __construct() {
$db_config = Config::getItem('database');
try {
$dsn = "mysql:host=" . $db_config['db_host'] . ";dbname=" . $db_config['db_name'] . ";charset=" . $db_config['db_charset'] . "";
parent::__construct($dsn, $db_config['db_username'], $db_config['db_password']);
} catch (\PDOException $err) {
trigger_error($err->getMessage(), E_USER_ERROR);
}
}
......
您可以通过检查文件是否存在来解决这个问题,这里是您可以在所有自动加载情况下使用的通用代码,不需要“\”
spl_autoload_register(function($class){
if(file_exists(SITE_PATH . 'app/classes/'. $class .'.php')){
require_once SITE_PATH . 'app/classes/'. $class .'.php';
}elseif(file_exists(SITE_PATH . 'app/another-folder/'. $class .'.php')){
require_once SITE_PATH . 'app/another-folder/'. $class .'.php';
}
});
您尝试在 错误的 命名空间中加载 PDO
。它不在我们提供的代码中。正如您在错误 Fatal error: Class 'app\lib\PDO' not found
中看到的,它尝试在命名空间 app\lib
中加载 PDO
class。您可能知道,它不在该名称空间中。
为了解决这个问题,您可以将其放在文件顶部:
use \PDO;
或者您需要在每次使用 PDO
class 之前放置 \
。要了解有关命名空间的更多信息,请查看 documentation。
PDO
是一个"normal"class,它有一个命名空间声明,如果你不在那个命名空间内加载它,它不会被发现。就像任何其他 class。同样,在您的情况下,您将它放在 app\lib
命名空间中。因此,您必须在 \PDO
命名空间中使用 PDO
class,因为那是 class 所在的命名空间。