我也不知道有木有这种东西,先看看我的过程
最开始:
$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(); }
你对数组 $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');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)
那么你认为书写一个一个的静态函数就不占内存了吗?
如果真的需要动态执行静态函数的话,那么写成匿名函数就是最佳的选择
不但可以减少编译开销(如果1万个静态函数,只用到十个,那9990个也是要编译的)
而且函数不用命名,直接与用途绑定,省去了对应检查
那么你认为书写一个一个的静态函数就不占内存了吗?
如果真的需要动态执行静态函数的话,那么写成匿名函数就是最佳的选择
不但可以减少编译开销(如果1万个静态函数,只用到十个,那9990个也是要编译的)
而且函数不用命名,直接与用途绑定,省去了对应检查