我的数据库类有问题。我正在推动我需要的所有方法,在关闭类之后,我正在创建它的实例并将其影响到$ database变量。然后在索引页面上我不需要显式文件,因为我正在设置一个__autoload函数来为我做这个。但是,当我只是尝试使用$ database-> isConnected()方法时,我设置了实例,它不起作用。我必须在索引页面上创建$ database的另一个实例,意味着调用new dataBase();再一次,只有自动加载才有效。
这里我不需要任何代码,只是希望有人给我逻辑推理的原因。我想要比复制粘贴更好地理解事物。因为我找到了一种解决方法,只需在新页面上创建一个实例,然后在类页面中进行实例化。
答案 0 :(得分:1)
以下是我从您的解释中得到的代码:
文件: 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
属于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()
。