Home > Backend Development > PHP Tutorial > 关于php中选择性声明变量

关于php中选择性声明变量

WBOY
Release: 2016-06-23 13:02:38
Original
978 people have browsed it

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

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

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

#这样就免去很多判断了,问题来了
#这样的话需要事先声明很多$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);
Copy after login
Array(    [b] => B    [c] => C)
Copy after login
Copy after login
Copy after login

你对数组 $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);
Copy after login
Copy after login
Array(    [b] => B    [c] => C)
Copy after login
Copy after login
Copy after login

还可以

$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);
Copy after login
Copy after login
Array(    [b] => B    [c] => C)
Copy after login
Copy after login
Copy after login


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

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

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

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

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



感谢老大,
就这么搞了
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template