そんな事があるかどうかは分かりませんが、私のプロセスを見てみましょう
初めに:
$field = ['aa', 'bb', .......];#十几二十之多$data = array();foreach($field as $v){ switch($v){ case "aa": $data[$v] = get_aa();break; ....... }}
$field = ['aa', 'bb', .......];#十几二十之多 $aa = function(){return get_aa();}; #将运算代码放入匿名函数 $data = array(); foreach($field as $v){ $data[$v] = $$v(); }
後者の場合は ${'get_' . $v}() で十分です
より一般的な
$f = array( 'a' => function() { return 'A'; }, 'b' => function() { return 'B'; }, 'c' => function() { return 'C'; }, 'd' => function() { return 'D'; },);$d = array('c', 'b');foreach(array_intersect_key($f, array_flip($d)) as $k=>$v) { $r[$k] = $v();}print_r($r);
Array( [b] => B [c] => C)
配列 $field のすべてのメンバーに対して get_aa() を実行します
get_aa(), get_bb(), get_cc().... になります
後者であれば ${'get_'. $v}() で大丈夫です
$f = array( 'a' => function() { return 'A'; }, 'b' => function() { return 'B'; }, 'c' => function() { return 'C'; }, 'd' => function() { return 'D'; },);$d = array('c', 'b');$r = array_intersect_key($f, array_flip($d));array_walk($r, function(&$v) { $v = $v(); });print_r($r);
Array( [b] => B [c] => C)
大丈夫
$f = array( 'a' => function() { return 'A'; }, 'b' => function() { return 'B'; }, 'c' => function() { return 'C'; }, 'd' => function() { return 'D'; },);$d = array('c', 'b');$r = array_intersect_key($f, array_flip($d));array_walk($r, function(&$v) { $v = $v(); });print_r($r);
Array( [b] => B [c] => C)
アドバイスありがとうございます
この配列は 6 で遊ぶことができます本当に静的関数を動的に実行する必要がある場合は、匿名関数を作成することが最良の選択です
コンパイルのオーバーヘッドを削減できるだけでなく (10,000 個の静的関数のうち 10 個だけを使用する場合、9990 個もコンパイルする必要があります)
さらに、関数に名前を付ける必要はなく、目的に直接バインドされており、対応するチェックの必要がなくなります
本当に静的関数を動的に実行する必要がある場合は、匿名関数を作成することが最良の選択です
コンパイルのオーバーヘッドを削減できるだけでなく (10,000 個の静的関数のうち 10 個だけを使用する場合、9990 個もコンパイルする必要があります)
そして関数に名前を付ける必要はなく、目的に直接バインドされているため、対応するチェックの必要がなくなります