我的数据库类有问题。我正在推动其中所需的所有方法,在关闭类后,我正在制作它的实例并将其影响为$database变量。然后在索引页上,我不需要明确的文件,因为我正在设置一个__autoload函数来为我执行此操作。但是当我只是尝试使用我设置的$database->isConnected((方法时,它不起作用。我必须在索引页面上制作另一个$database实例,意味着调用新的数据库((;再次,只有这样自动加载才能工作。
在这里,我不需要任何代码,只需要有人给我这样做的逻辑原因。我想比复制粘贴更好地理解事情。因为我找到了一种解决方法,它只是每次在新页面上创建一个实例并在类页面中 vere。
这是我从你的解释中得到的代码:
文件:数据库.php
class Database {
isConnected() {
//Some code
}
}
$database = new Database();
文件:索引.php
function __autoload ($class) {
include $class+'.php'; //Note this is highly unsafe
}
$database->isConnected();
问题是__autoload()
没有做你认为它做的事情。
__autoload()
加载在引用时尚未定义的类。但是PHP不知道$database
是Database
类的。就它而言,它在这一点上是一个未定义的变量。
因此,如果您这样做:
文件:数据库.php
class Database {
isConnected() {
//Some code
}
}
文件:索引.php
$database = new Database();
PHP 会意识到数据库没有定义,并调用__autoload()
来加载数据库.php(假设__autoload()
定义正确(。然后构造函数将运行,$database
将正确设置。
你应该做的是包含数据库文件(include 'database.php'
(或使用静态方法(例如 Database::getDatabase();
( - 引用该类,以便 PHP 知道__autoload()
它。