2011-12-09 9 views
0

ここに私のクラスの例があります。コンストラクタにデフォルトオプションが定義されており、提供されているオプションに置き換えたいと思います。ArrayコンストラクタでPHPを置き換えます

class Class{ 
    private $options; 

    function __construct($options=null){ 
    $this->options = array('option1'=>'value', 'option2'=>'value', ...); 
    array_replace(_recursive)($this->options,$options); 
    } 

    function showOpts(){ 
    print_r($this->options); 
    } 
} 

$opt = array('newOpt'=>value ..); 
$c = new Class($opt); 
$c->showOpts(); 

オプションの内容を印刷すると、置き換えなくてもデフォルト値が得られます。 私は何が間違っていますか?

+1

あなたはタイプミスがあります( 'array_replace(_recursive)はarray_replace_recursiveでなければなりません) –

答えて

2

array_replace_recursiveは結果の配列を返します。

あなたはアレイ法の結果と変数のオプションを設定するのを忘れます$ this->オプション

2

にその結果を割り当てる必要があります。

function __construct($options=null){ 
    $this->options = array('option1'=>'value', 'option2'=>'value', ...); 
    $this->options = array_replace_recursive($this->options,$options); 
} 
1

防弾:

function __construct($options = array()){ 
    $this->options = array('option1'=>'value', 'option2'=>'value', ...); 
    $new_options = array_replace($this->options, $options); 
    if ($new_options) 
     $this->options = $new_options; 
    } 

関数定義:

array array_replace (array &$array , array &$array1 [, array &$... ])

エラーが発生した場合、配列、またはNULLを返します。

関連する問題