我有下面的類層次結構,這在下面再現腳本中所示:合併數組屬性的對象
<?php
header('Content-Type: text/plain');
class A
{
public $config = array(
'param1' => 1,
'param2' => 2
);
public function __construct(array $config = null){
$this->config = (object)(empty($config) ? $this->config : array_merge($this->config, $config));
}
}
class B extends A
{
public $config = array(
'param3' => 1
);
public function __construct(array $config = null){
parent::__construct($config);
// other actions
}
}
$test = new B();
var_dump($test);
?>
輸出:
object(B)#1 (1) {
["config"]=>
object(stdClass)#2 (1) {
["param3"]=>
int(1)
}
}
我想要的東西,是A::$config
不能被重寫通過B::$config
。可能有很多來自B
的後代類別,我想要更改$config
,但如果匹配$config
值,則需要那些$config
值合併/覆蓋,如果匹配所有父代的$config
值。
問:我該怎麼做?
我試過使用array_merge()
,但在非靜態模式下,這些變量只是自己重寫。如果沒有static
(後期靜態綁定),是否有辦法實現類樹的合併效果?
適應你可能* *可以做到這一點有很多Reflection'和反省的',檢查當前類,其母公司,母公司等和合並的陣列。請參閱http://php.net/reflectionclass。 – deceze
@deceze爲它編寫答案,以便將來爲其他用戶使用。 :) –
@deceze好吧,會有很多過熱,不是嗎? – BlitZ