实例化数据库对象问题


instantiating a database object issue

我的数据库类有问题。我正在推动其中所需的所有方法,在关闭类后,我正在制作它的实例并将其影响为$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不知道$databaseDatabase类的。就它而言,它在这一点上是一个未定义的变量。

因此,如果您这样做:

文件:数据库.php

class Database {
    isConnected() {
        //Some code
    }
}

文件:索引.php

$database = new Database();

PHP 会意识到数据库没有定义,并调用__autoload()来加载数据库.php(假设__autoload()定义正确(。然后构造函数将运行,$database将正确设置。

你应该做的是包含数据库文件(include 'database.php'(或使用静态方法(例如 Database::getDatabase(); ( - 引用该类,以便 PHP 知道__autoload()它。