让多个类使用同一个父类的正确方法是什么?
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);
像你的问题一样,扩展代码会造成混乱,随着代码的成熟,你将无法轻易理清。编写独立的代码单元并利用接口,您可以单独处理它们,而不必担心其余代码的作用。
我有一个项目有很多 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);
像你的问题一样,扩展代码会造成混乱,随着代码的成熟,你将无法轻易理清。编写独立的代码单元并利用接口,您可以单独处理它们,而不必担心其余代码的作用。