编辑:此问题不重复。这就是原因。这些答案都没有帮助,因为我对OOP完全不熟悉 - 我需要根据我的理解水平量身定做的答案。仅仅因为出现这个问题是相似的,提问者不是 - 更不用说我首先特别要求一个'可理解'的答案。
我仍然是PHP总体上相当新的,甚至更新的面向对象的PHP,刚刚开始在过去一周内开始自我教育,我仍然无法掌握一些概念,如继承和什么类抽象是的 - 其中一些我已经能够合理地快速恢复,因为我一直在使用PDO来处理我的数据库连接和查询一段时间,但是否则我仍然是OOPHP的新手,所以请耐心等待如果我的问题看起来有点'基本'。
我的每个网页顶部都需要一个初始化文件(init.php),除其他外,它使用PDO连接到MySQL数据库:
try { $dbh = new PDO(conn. data here); } catch(PDOException $e) { echo $e->getMessage(); }
因此,据我所知,在执行此代码时,$dbh
现在被实例化为PDO对象。在init.php文件的底部,需要链接到函数文件,例如user.func.php
,images.func.php
等。
问题是每当我需要从我的一个函数中查询数据库时,我需要在我能够操作之前将$dbh
声明为全局,如下所示:
function myFunction { global $dbh; // Here's the problem! try { $stmt = $dbh->prepare(Some SQL here); $stmt->execute(); } catch { // etc. } }
现在,问题不在于我对为什么的理解我必须声明为全局 - 我理解的很多,但我怎么能避免它。我已经阅读了一些关于为什么要避免全局变量的StackOverflow答案,我只是不确定如何。
如何从代码中删除global $dbh
?我是否会创建一个数据库处理程序类并在每次实例化它时将我的连接设置传递给构造函数方法并使用它? (似乎有点多余)。
不确定如何替换我对全局变量的使用,所以我能理解的帮助绝对值得赞赏!