PDO对象的最佳利用率

时间:2018-06-11 07:25:13

标签: php performance pdo

系统使用单个User类,大部分方法都使用PDO与数据库交换数据。

class User {

    private $db_server;
    private $db_login;
    private $db_pass;
    private $db;

    public function method_1(){
        $statement = new PDO("mysql:host=".$this->db_server.";dbname=".$this->db, $this->db_login, $this->db_pass, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));
    //doing something with PDO
    }
// ...
    public function method_n(){
        $statement = new PDO("mysql:host=".$this->db_server.";dbname=".$this->db, $this->db_login, $this->db_pass, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));
    //doing something with PDO
    }
}

问题是我是否有效地使用PDO?我应该将PDO对象实例化为类属性之一并将其传递给需要它的每个方法,而不是在方法本身中实例化一个新的PDO对象吗?

1 个答案:

答案 0 :(得分:1)

你应该看看依赖注入。

主要思想是,在创建User时注入一个组合完整的PDO-Object(依赖项)。尝试在应用程序中仅配置一次PDO并通过singleton-pattern获取它。这样你只有这一个实例。

E.g。

$pdo = new PDO($connString);
$user = new User($pdo); 

请务必向User添加对象属性,以便访问$ this-> pdo。

这只是解决问题的一种方法,但它不是最有效的方法。

如果您打算使用最佳实践方法的原则,则根本不会在用户中使用PDO-Object。相反,您将构建一个Object-Relational-Mapper(ORM)。 在这种方法中,您将拥有一个中央实体管理器,它保存数据库适配器,在您的情况下为pdo。此实体管理器将使用用户并可以对其应用数据库操作,例如删除,创建,更新。您将定义一般映射,以便对象属性等于表列。

随意询问您是否需要更多信息:)