繁体   English   中英

PHP类扩展多次

[英]php class extended multiple times

在花了半个小时为这个问题找到一个恰当的,不言自明的标题之后,我终于放弃了。 抱歉,我不是英语母语人士。

无论如何,问题是关于使用特定的类进行多次扩展,而不是多次继承。 因此,想象一下从同一函数调用的两个存储库类:

public function someFunction() 
{
   $qp = QuestionRepository();
   $cp = CommentRepository();
} 

和QuestionRepository就像:

class QuestionRepository extends PDO 
{
    public function __construct()
    {
        parent::__construct();
    }
}

CommentRepository类似于:

class CommentRepository extends PDO 
{
    public function __construct()
    {
        parent::__construct();
    }
}

而PDO类是这样的:

class PDO 
{
    public function __construct() 
    {
        $pdo = new PDO(...);
    } 
}

因此,基本上, PDO类被扩展了两次,因此启动了两个PDO实例。 但是,问题是这是否意味着与mysql有2个不同的连接-这将导致性能下降,或者pdo识别出存在连接,因此它只是忽略了第二个实例?

您可以在PDO中为mysql连接声明一个“静态”字段。 这样,无论哪个子类负责实例化,都将在每个实例中使用相同的字段。

它还要求您静态访问该字段。 PDO::$mysql_link;

如果在未指定可见性的情况下声明该字段,则该字段将是公共的,这意味着只要定义了PDO,您就可以在任何地方引用同一字段。

我不确定PDO是否有支票。

但是您有不同的选择。 构建一个Singelton PDO对象,并在每个类中使用此Singleton或使用依赖注入。 含义是设置一个PDO对象,然后将其注入到构造函数中的类中(构造函数注入),或使用另一个函数注入(类注入器)

我将使用依赖项注入来运行,因此您可以轻松更改“数据库访问对象”

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM