方法
- ラムダ定義時に use でスコープに変数を追加することが出来る
- ラムダ自身の参照を追加してやる
例
例えば SimpleXML を使用して配列に変換する場合
convert_xml_to_array.php
<?php
// 配列作成無名関数
$fun = function ($simplexml, $out=array()) use (&$fun) {
foreach ( (array) $simplexml as $index => $node ) {
if ( is_object($node) || is_array($node) ) {
$out[$index] = $fun($node);
}
else {
$out[$index] = $node;
}
}
return $out;
};
$simplexml = simplexml_load_string($str);
var_dump( $fun($simplexml) );