我有一个 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/

10-12 19:03