我有一个 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() 方法(或抽象祖先),并且在这些类的实例化过程中,您可以使用 Factory 将所需的连接添加到物体。这应该包含在一些类加载器中,它是您的模型结构的一部分。
看,小菜一碟,但对于小而快的开发,我会坚持使用 Singleton ;)
关于php - php中的全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12973644/