php - 如何建立全局联系?

标签 php

我想创建一个全局连接,因此在整个脚本中我可以访问单个对象。实际上我做了这门课:

<?php

class Database {

private static $db;
private $connection;

private function __construct($conn) {
    $this->connection = $conn;   
    $this->init();
}

private function init(){
     // here the connection is going to execute
     $host = $this->_connection['host'];
     //etc...
}

function __destruct() {
    $this->connection->close();
}

public static function getConnection($conn) {
    if (self::$db == null) {
        self::$db = new Database($conn);
    }
    return self::$db->connection;
}
}

?>

我像这样传递连接的详细信息: $db = Database::getConnection($connection); 现在 $connection 包含一个具有凭据访问权限的数组。这里没问题,一切正常。主要问题是仅当索引创建连接实例时才调用 $db = Database::getConnection($connection); 。我的目标是在任何模型或 Controller 中调用 $connection 对象,例如:

class Model
{

  function __construct()
  {
       $this->db = Database::getConnection();
  }

}

您如何看到我无法传递连接参数,因为我只想使用先前由index.php 调用建立的连接。如何在不传递参数的情况下访问此连接?

最佳答案

您需要将 $conn 参数设为可选,并确保它在第一次调用时传递:

public static function getConnection($conn=null) {
    if (self::$db == null) {
        if ($conn === null) {
            throw new Exception('Can not initialize the database');
        }
        self::$db = new Database($conn);
    }
    return self::$db->connection;
}

然后您需要在应用程序启动期间的某个位置调用 getConnection 并将配置传递给它。

之后就可以不带参数地使用它了。

如果您错误地没有配置数据库,则会出现明显的错误。

关于php - 如何建立全局联系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35419168/

相关文章:

php - 使用 PHP (PDO) 在 HTML 图像标记中显示来自 mysql 数据库的图像 (blob)

php - WooCommerce 3 中的条件产品价格购物车问题

php - 区分 MYSQL 查询具有相似编号的条目 (17, 170, 171)

php - 更新当前用户信息 PHP PDO 时出现问题

php - 无限子类别 php 和 mysqli 列出 opencart 类别

PHP isset - 测试不区分大小写

php - 在后台运行一个ffmpeg进程

静态方法上的 PHP call_user_func

php - 搜索关键字并忽略数据馈送中的关键字

php - Zend框架及参数