这是我从您的解释中得到的代码:
文件: database.php
class Database {
isConnected() {
//Some code
}
}
$database = new Database();
文件: index.php
function __autoload ($class) {
include $class+'.php'; //Note this is highly unsafe
}
$database->isConnected();
问题是它__autoload()
没有做你认为它做的事情。
__autoload()
加载引用时尚未定义的类。但是 PHP 不知道那$database
是 class Database
。就它而言,此时它是一个未定义的变量。
所以如果你这样做了:
文件: database.php
class Database {
isConnected() {
//Some code
}
}
文件: index.php
$database = new Database();
PHP 会意识到未定义数据库并调用__autoload()
将加载 database.php(假设__autoload()
定义正确)。然后构造函数将运行并$database
正确设置。
您应该做的是包含数据库文件 ( include 'database.php'
) 或使用静态方法 (例如Database::getDatabase();
) - 引用该类以便 PHP 知道__autoload()
它。