PHP - 将PDO连接传递给所有函数

时间:2014-06-11 14:18:45

标签: php pdo

我有一个try catch块,它通过PDO连接到数据库。我希望能够在我的所有函数中引用它,而不必将其作为参数传递。我该怎么做?提到的代码是:

try {
    $database = new PDO('mysql:host=127.0.0.1;dbname=coop1','root','');
    $database->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}catch(PDOException $e) {
    echo $e->getmessage();
    die();
}

编辑:

我创建了一个单例类(在下面尝试),它在_construct

上执行try catch块
final class database {

    private static $instance = NULL;


    private function __construct() {
        try {
            $database = new PDO('mysql:host=127.0.0.1;dbname=coop1','root','');
            $database->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        } catch(PDOException $e) {
            echo $e->getmessage();
            die();
        }
    }

    public static function getInstance() {
        static $instance = null;
        if (self::$instance === NULL) {
            $instance = new database();
        }
        return $instance;
    }
}

1 个答案:

答案 0 :(得分:3)

将其声明为singleten类的静态属性。你可以用

访问它
$pdo = Singleton::instance()->getConnection();

或者我可以建议看一下MArtin Fowler的关系数据库映射模式。它更进一步,而不是集中连接本身。

另外,Doctirne项目完全实现了:www.doctrine-project.org

final class database {

    private static $instance = NULL;

    private $pdo;  //added private variable for pdo


    private function __construct() {
        try {
            $database = new PDO('mysql:host=127.0.0.1;dbname=coop1','root','');
            $database->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        } catch(PDOException $e) {
            echo $e->getmessage();
            die();
        }

        $this->pdo = $database; //saved the connection into the new variable
    }

    public static function getInstance() {
        static $instance = null;
        if (self::$instance === NULL) {
            $instance = new database();
        }
        return $instance;
    }

    //added a function to get the connection itself
    function getConnection(){
        return $this->pdo;
    }
}

现在你使用它:

$pdo = database::getInstance()->getConnection();