我想创建一个全局连接,因此在整个脚本中我可以访问单个对象。实际上我做了这门课:
<?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/