1

编辑:这个问题不是重复的。这就是为什么。这些答案都没有一点帮助,因为我对 OOP 完全陌生——我需要一个适合我理解水平的答案。仅仅因为这个问题看起来很相似,提问者就不是——更不用说我首先特别要求一个“可以理解的”答案。


总体而言,我对 PHP 还是比较陌生,对面向对象的 PHP 还是比较陌生,在过去一周内才刚刚开始自学,我仍然无法掌握一些概念,例如继承和什么是类抽象——一些由于我一直在使用 PDO 处理我的数据库连接和查询一段时间,因此我已经能够相当快地掌握它,但除此之外我仍然是 OOPHP 的新手,所以如果我的问题请多多包涵似乎有点“基本”。

我在每个网页的顶部都有一个初始化文件(init.php),除其他外,它使用 PDO 连接到 MySQL 数据库,如下所示:

尝试 {
    $dbh = new PDO(conn. data here);
} 捕捉(PDOException $e){
    回声 $e->getMessage();
}

因此,据我了解,在执行此代码时,$dbh现在将其实例化为 PDO 对象。在我的 init.php 文件的底部有很多需要链接到函数文件,例如user.func.php,images.func.php等。

问题是每当我需要从我的一个函数内部查询数据库时,我需要先声明$dbh为全局,然后才能对其进行操作,如下所示:

功能我的功能{
    全球 $dbh; // 问题来了!

    尝试 {
        $stmt = $dbh->prepare(这里有一些 SQL);
        $stmt->执行();
    } 抓住 {
        // ETC。
    }
}

现在,问题不在于我对为什么必须声明为全局变量的理解——我明白了很多,而是如何避免它。我已经阅读了一些关于为什么要避免全局变量的 StackOverflow 答案,但我不确定如何。

我将如何global $dbh从我的代码中删除?每次我实例化它并使用它时,我会创建一个数据库处理程序类并将我的连接设置传递给构造函数方法吗?(似乎有点多余)。

不太确定如何替换我对全局变量的使用,因此绝对感谢我能理解的帮助!

4

0 回答 0