Php PDO对象的优化利用

Php PDO对象的优化利用,php,performance,pdo,Php,Performance,Pdo,系统使用单个用户类,大多数方法使用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,

系统使用单个用户类,大多数方法使用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对象?

您应该看看依赖项注入

其主要思想是,在创建用户的同时,注入一个组合的、完整的PDO对象(依赖项)。尝试在应用程序中只配置一次PDO,并通过单例模式实现它。这样,您只有一个实例

例如

确保向用户添加对象属性,以便您可以访问$this->pdo

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

如果要使用最佳实践方法的原则,则根本不会在User中使用PDO对象。相反,您将构建一个对象关系映射器(ORM)。 在这种方法中,您将拥有一个中央实体管理器,它保存数据库适配器(在您的例子中是pdo)。该实体管理器将接收用户,并可以对其应用数据库操作,如删除、创建、更新。您可以定义一个常规映射,以便对象属性等于表列


如果您需要更多信息,请随时询问:)

谢谢您的回复。你能给我指一个好的ORM教程和/或例子吗?不客气。我认为您可以阅读流行的“条令”ORM框架教程。它将帮助您将条令整合到您的项目中,并传输所需的专有技术:)我非常感谢您的帮助!虽然我不反对ORM,但它需要作曲家。我的系统的一个要求是它必须是轻量级的,能够在共享主机上运行。并非所有共享主机都允许自定义安装,例如Composer。哦,我理解。我认为有一种方法可以在没有composer的情况下安装它,因为几年前我在一个旧版本上安装了它。你可以去他们的GITHUB页面,下载一个压缩版本:也可以考虑其他更轻量级的扩展。如果您有时间,您可以构建自己的基本映射器,以满足您的需求。
$pdo = new PDO($connString);
$user = new User($pdo);