我有一个 userdb
类,我在其中声明了一个返回数据库连接的函数:
return $con = new PDO("mysql:host=$host;dbname=$db", $user, $pass);
我有各种函数,甚至在其他类中,我必须访问
$con
(例如传递查询或获取数据),但我无法访问此变量。有没有更好的方法来定义和使用数据库类?请记住,我还有其他类需要访问
userdb
类。 最佳答案
我建议您为此使用 Singleton Pattern :
在您的 userdb 类中,声明一个静态属性 $scon
:
private static $scon;
并假设您上面提到的函数名为
createConnection()
,您应该创建以下静态方法:public static function connect() {
if (empty(self::$scon)) {
$instance = new userdb();
self::$scon = $indtance->createConnection();
}
return self::$scon;
}
有了这个,您将能够通过以下方式访问您的 userdb 连接:
userdb::connect();
此外,由于这是一个单例,它只会连接一次,并使用该连接直到脚本结束。
注意(关于依赖注入(inject)): 由于@KevinM1 提到了依赖注入(inject),我必须补充一点,它也是一种可能的,而且非常优越的解决方案。它要求您使用数据库连接为所有类创建 setConnection() 方法(或抽象祖先),并且在这些类的实例化期间,您可以使用工厂将所需的连接添加到对象。这应该包含在某个类加载器中,它是您的模型结构的 avare。
看,蛋糕的和平,但对于小而快的开发,我会坚持使用单例;)
关于php - php中的全局变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12973644/