classのデフォルト値を設定する時などに便利なこと。
説明のためのソース
$params = array('host'=>'192.168.1.1', 'dummy'=>'hoge'); $default = array('host'=>'localhost', 'port'=>80); $params = array_intersect_key($params, $default) + $default; print_r($params );
出力
Array ( [host] => 192.168.1.1 [port] => 80 )
array_intersect_key;
すべての引数に存在するキーのものを含む連想配列を返す。
同じキーの場合、最初の引数の値を返す。
→配列のキー'host'が共通なので、'host'=>'192.168.1.1' が返る。共通でない'dummy'は無視される。
配列の結合演算子(+);
「+」演算子は、右側の配列を左側の配列に追加したものを返す。
両方の配列に存在するキーについては左側の配列の要素が優先され、右側の配列にあった同じキーの要素は無視される。
→配列キー'host'は無視され、配列キー'port'だけ追加される。
class の例
$params = array('host'=>'192.168.1.1'); $obj = new hoge($params); print_r($obj->conf); class hoge{ public $conf = array('host'=>'localhost', 'port'=>80); function __construct(array $params){ $this->conf = array_intersect_key($params, $this->conf) + $this->conf; } }
出力
Array ( [host] => 192.168.1.1 [port] => 80 )
$params にclass側でデフォルト値が定義されていない無効なパラメータが指定されても無視され、デフォルト値が定義されているパラメータ名のものだけが上書き設定される。