php - php中的全局变量

标签 php database global

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

相关文章:

php - 使用 sed 删除第一行代码中 <?php ?> 之间的所有内容(包括 <?php ?>)

php - composer.phar 可以和代码一起部署吗?

php - 为什么PDO连接需要1秒?

java - 同时更新两个相同的数据库模式

mysql - Slick 中长时间运行的事务

c - printf 对于未初始化的变量打印什么?

php - 当 mysql_query 返回 false 时

MySQL:更新太慢

c - 将数组的起始地址对齐为 32 位的倍数?

java - 为什么Java不允许在类外初始化变量或常量?