扩展与重新实例化

时间:2019-07-19 08:50:45

标签: php

我想知道以下两种方法中哪种更有效,或者因为开销很小,所以选择哪种方法实际上是否无关紧要。

从本质上讲,最好实例化一个您将要在父类中经常使用的类(例如,“ Db”),并在想要使用“ Db”时简单地扩展该父类,或者最好在要使用它的类的构造函数中分别实例化“ Db”。

显然,避免重复代码的最佳途径是在父类中实例化它,但出于好奇,我想知道是否有人对这些服务器对服务器的影响有多重要两条路线。

路线1:

// Parent
class template {

    public function __construct() {

        $this->db = new Db();

    }

}

// Child
class login extends template {

    public function __construct() {

        // Has access to $this->db

    }

}

路线2:

class login {

    public function __construct() {

        $this->db = new Db();

    }

}

谢谢。

1 个答案:

答案 0 :(得分:1)

性能无关紧要。

如果扩展模板类,则仍然必须实例化子类,而子类又将隐式调用父类的构造函数。这意味着在两种情况下,都将实例化DB类。更糟糕的是,扩展类可能会慢一些,因为它增加了额外的函数调用(父构造方法的调用)的开销。

话虽如此,我强烈建议您仔细阅读有关继承的内容。亲子关系在那里执行“是”关系。如果您只是出于性能原因而开始扩展同一课程,那么以后您可能会一头雾水。对于大多数程序员来说,让不相关的类从同一个父类中扩展出来,这简直是意外的行为。