Php 实例化数据库对象问题

Php 实例化数据库对象问题,php,autoload,Php,Autoload,我的数据库类有问题。我正在推送它所需的所有方法,在关闭该类之后,我创建了它的一个实例,并将其影响为一个$database变量。然后在索引页面上,我不需要显式地使用该文件,因为我正在设置一个_autoload函数来为我实现这一点。但当我尝试使用我设置的$database->isConnected()方法时,它就不起作用了。我必须在索引页上创建另一个$database实例,这意味着调用新数据库();同样,只有这样,自动加载才能工作 在这里,我不需要任何代码,只想有人告诉我为什么它会这样做的逻辑原因。

我的数据库类有问题。我正在推送它所需的所有方法,在关闭该类之后,我创建了它的一个实例,并将其影响为一个$database变量。然后在索引页面上,我不需要显式地使用该文件,因为我正在设置一个_autoload函数来为我实现这一点。但当我尝试使用我设置的$database->isConnected()方法时,它就不起作用了。我必须在索引页上创建另一个$database实例,这意味着调用新数据库();同样,只有这样,自动加载才能工作


在这里,我不需要任何代码,只想有人告诉我为什么它会这样做的逻辑原因。我想更好地理解事情,而不仅仅是复制粘贴。因为我找到了一个解决方法,就是每次在新页面上创建一个实例,然后在类页面中创建一个实例。

以下是我从您的解释中获得的代码:

文件:database.php

class Database {
    isConnected() {
        //Some code
    }
}
$database = new Database();
class Database {
    isConnected() {
        //Some code
    }
}
文件:index.php

function __autoload ($class) {
     include $class+'.php';  //Note this is highly unsafe
}
$database->isConnected();
$database = new Database();

问题是,
\uuu autoload()
没有做你认为它做的事情

\uuuu autoload()
加载引用时尚未定义的类。但是PHP不知道
$database
属于
数据库类。就它而言,在这一点上它是一个未定义的变量

因此,如果你这样做了:

文件:database.php

class Database {
    isConnected() {
        //Some code
    }
}
$database = new Database();
class Database {
    isConnected() {
        //Some code
    }
}
文件:index.php

function __autoload ($class) {
     include $class+'.php';  //Note this is highly unsafe
}
$database->isConnected();
$database = new Database();
PHP会意识到数据库没有定义,并调用
\uuuu autoload()
,这将加载database.PHP(假设
\uu autoload()
定义正确)。然后,构造函数将运行并正确设置
$database


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

您应该发布代码。很难从你的解释中理解你的确切意思。是的,我的问题不太清楚,菲利普明白了我的意思,现在问题已经解决了。非常感谢。是的,我有效地使用了静态方法,它们工作得非常好。非常感谢,菲利普,你的解释对我来说非常清楚。我希望其他人会发现它和我发现的一样有用。)没问题-记住接受正确的答案:-)是的,我试着喜欢你的答案,但它说我是新的。。我需要15个名声和东西。。。但你的回答肯定很清楚,很有帮助。。。再次感谢。)