Rumah > pembangunan bahagian belakang > tutorial php > 关于php中选择性声明变量

关于php中选择性声明变量

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Lepaskan: 2016-06-23 13:02:38
asal
1017 orang telah melayarinya

我也不知道有木有这种东西,先看看我的过程
最开始:

$field = ['aa', 'bb', .......];#十几二十之多$data = array();foreach($field as $v){            switch($v){            case "aa": $data[$v] = get_aa();break;            .......            }} 
Salin selepas log masuk

后来说
如果$field只有一个值zz
这样程序会从第一个case一个一个比对判断下去,不好
然后我就
 $field = ['aa', 'bb', .......];#十几二十之多 $aa = function(){return get_aa();}; #将运算代码放入匿名函数 $data = array(); foreach($field as $v){                $data[$v] = $$v(); }
Salin selepas log masuk

#这样就免去很多判断了,问题来了
#这样的话需要事先声明很多$aa、$bb这样的变量,所以我就琢磨如果$field=['zz'];能不能选择性只加载$zz这个变量
或者说直接将最原始的无故判断给搞定了去,有啥子思路咱没琢磨到的
感谢


回复讨论(解决方案)

你对数组 $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);
Salin selepas log masuk
Array(    [b] => B    [c] => C)
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

你对数组 $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);
Salin selepas log masuk
Salin selepas log masuk
Array(    [b] => B    [c] => C)
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

还可以

$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);
Salin selepas log masuk
Salin selepas log masuk
Array(    [b] => B    [c] => C)
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk


感谢指点
这数组玩的6
有个问题,那实际应用中数组$f会特别大了,而且每个值都是匿名函数这东西,是不是特占内存,还是说我想多了,其实不用考虑的

那么你认为书写一个一个的静态函数就不占内存了吗?

如果真的需要动态执行静态函数的话,那么写成匿名函数就是最佳的选择
不但可以减少编译开销(如果1万个静态函数,只用到十个,那9990个也是要编译的)
而且函数不用命名,直接与用途绑定,省去了对应检查

那么你认为书写一个一个的静态函数就不占内存了吗?

如果真的需要动态执行静态函数的话,那么写成匿名函数就是最佳的选择
不但可以减少编译开销(如果1万个静态函数,只用到十个,那9990个也是要编译的)
而且函数不用命名,直接与用途绑定,省去了对应检查



感谢老大,
就这么搞了
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan