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

What's the correct way to have multiple classes use the same parent class?

我有一个项目有很多 classes,存储为单独的文件,其中一些继承了相同的父 class。有问题的 class 是一个设置 class,它包含用户偏好等。

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

例如...

我每次都用extends吗?还是 extends 每次都执行并重新定义代码?

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

我是否以某种方式在不同 class 的新变量中实例化 classes 并通过函数参数将变量传递给继承 classes?还是这种形式不好?

我就是不知道!


settings.php 看起来像这样:

class Settings
{
    public $pref = array();

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

继承的 class 看起来像这样:

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'], ' ';
        }
        ...
    }
}

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

Animal < Mammal < Primate < Human

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

然而,关键是如果一个 class 与另一个 class 无关,或者如果它们只是相切相关,那么它们不应该相互继承。

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

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

// 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);

像你的问题一样,扩展代码会造成混乱,随着代码的成熟,你将无法轻易理清。编写独立的代码单元并利用接口,您可以单独处理它们,而不必担心其余代码的作用。