-2

我的数据库类有问题。我正在推送我需要的所有方法,在关闭类之后,我正在创建它的一个实例并将其影响到一个 $database 变量。然后在索引页面上,我不需要明确要求该文件,因为我正在设置一个 __autoload 函数来为我执行此操作。但是,当我尝试使用例如我设置的 $database->isConnected() 方法时,它不起作用。我必须在索引页面上创建另一个 $database 实例,这意味着调用 new dataBase(); 再次,只有这样自动加载才能工作。

在这里我不需要任何代码,只是希望有人给我这样做的逻辑原因。我想比复制粘贴更好地理解事情。因为我找到了一种解决方法,即每次在新页面上创建一个实例,并在课程页面中创建一个实例。

4

1 回答 1

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是 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()它。

于 2012-09-09T15:59:36.143 回答