gpt4 book ai didi

php - 如何通过合并数组继承父类数组属性?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:03:14 27 4
gpt4 key购买 nike

我经常在我的类中使用存储选项数组的属性。我希望能够以某种方式合并父类中声明的默认值中的那些选项。

我用一些代码进行了演示。

class A
{
public $options = array('display'=>false,'name'=>'John');
}

class B extends A
{
public $options = array('name'=>'Mathew');
}

现在,当我创建 B 时,我希望 $options 包含来自 A::options 的合并数组

现在发生的是这个。

$b = new B();
print_r($b);
array('name'=>'Mathew');

我想要使用 array_merge_recursive() 这样的东西。

array('display'=>false,'name'=>'Mathew');
  • 也许这是我可以在构造函数中做的事情?
  • 是否有可能使这成为A 类 的行为?这样我就不必总是在所有子类中实现相同的代码。
  • 我可以使用反射自动查找两个类中的数组属性并合并它们吗?

最佳答案

除了前面的答案之外,另一种可能适用于某些情况的方法是使用 PHP 反射或内置类函数。这是使用后者的基本示例:

class Organism
{
public $settings;
public $defaults = [
'living' => true,
'neocortex' => false,
];
public function __construct($options = [])
{
$class = get_called_class();
while ($class = get_parent_class($class)) {
$this->defaults += get_class_vars($class)['defaults'];
}
$this->settings = $options + $this->defaults;
}
}
class Animal extends Organism
{
public $defaults = [
'motile' => true,
];
}
class Mammal extends Animal
{
public $defaults = [
'neocortex' => true,
];
}

$fish = new Animal();
print_r($fish->settings); // motile: true, living: true, neocortex: false
$human = new Mammal(['speech' => true]);
print_r($human->settings); // motile: true, living: true, neocortex: true, speech: true

关于php - 如何通过合并数组继承父类数组属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14417391/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com