【发布时间】:2015-05-06 14:37:55
【问题描述】:
我有一个关于 PHP OOP 最佳实践的问题,与在方法中使用全局变量有关。我知道我在做的是不正确的,但我不确定应该怎么做。
我们正在使用这个数据库类:https://github.com/joshcam/PHP-MySQLi-Database-Class/blob/master/MysqliDb.php
我们在每个页面都需要的config.php 文件中使用以下代码行创建对象。
$db = new MysqliDb(host,user,pwd,dbname);
但是,如果我们希望访问数据库,我们所有类中的每个方法都必须使用global $db。这是不好的做法吗?如果是这样,应该怎么做?我们的类所有都应该扩展数据库类(MysqlDb)吗?
【问题讨论】:
-
我不确定它是否适用于您的情况,但可以通过 PHP 类型提示将 $db 对象作为参数传递给另一个类的构造函数/函数:stackoverflow.com/questions/5724677/…。使用它,您可以将 $db 声明为其他类的私有变量/对象,并通过这些类的构造函数启动它。然后这些类的所有函数都可以访问 $db 对象,而不必在每个函数/方法中将其声明为全局变量。
-
将 $db 注入到所有类的构造函数中,并将其设置为该类的属性,以便所有方法都可以使用它(依赖注入)
-
@MarkBaker 您认为我的评论与您的建议指向相同吗?我自己对依赖注入的概念不是很清楚。我们说的是同一件事吗?
-
为什么不使用任何注册表模式?
-
这很有意义(将其添加到构造函数中)。仍然可以使用
global $db来完成吗?这可能有点偏离主题,并且是我自己受过教育的,但是如果变量被标记为公共而不是私有会受到什么影响?这会导致它与其他类发生冲突吗...?
标签: php oop php-mysqlidb