让多个类使用同一个父类的正确方法是什么?

时间:2015-01-05 02:52:25

标签: php oop inheritance

我有一个项目有很多类,存储为单独的文件,其中一些继承了相同的父类。有问题的类是一个设置类,它保存用户首选项等。

我想知道:让这些类使用相同信息的正确方法是什么?

例如......

我每次都使用extends吗?或者extends每次都执行并重新定义代码?

我是否在每个继承类$this->example = new Class();函数中实例化新变量中的类,如__construct()?或者这会占用更多内存吗?

我是否以某种方式在不同类中的新变量中实例化类,并通过函数参数将变量传递给继承类?或者是那种糟糕的形式?

我只是不知道!


settings.php看起来像这样:

class Settings
{
    public $pref = array();

    function __construct() {
        $this->pref['name'] = 'John';
        $this->pref['age'] = 21;
        $this->pref['display_dob'] = true;
        ...
    }
}

继承类如下所示:

class ShowPerson extends Settings
{
    public function display()
    {
        echo $this->pref['name'], ' ';
        echo $this->pref['age'], ' years old';

        if ($this->pref['display_dob'] == true) {
            echo ' born ' . $this->pref['birth_date'], ' ';
        }
        ...
    }
}

1 个答案:

答案 0 :(得分:1)

没有。继承用于扩展属于同一类类的类。例如:

Animal < Mammal < Primate < Human

你做多少粒度(即你扩展多少次)取决于你的需要。

然而,重点在于,如果一个类与另一个类无关,或者它们只与它们相关,那么它们就不应该相互继承。

应该将类似设置的东西传递给类(即对象)。

所以,在你的问题中解释代码,你可以这样做:

// The settings should be created outside
$settings = new Settings;

// The settings are then provided to the new object
// Here we just pass it to the constructor, but you
// could also have something like a `useSettings()`
// method that sets it
$person = new Person($settings);

扩展代码,就像你的问题一样,会产生纠结的混乱,当你的代码成熟时,你将无法轻易解开。编写自包含的代码单元,并使用接口,您可以单独处理它们,而不用担心代码的其余部分。