欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

关于php中选择性声明变量

程序员文章站 2022-06-02 09:11:28
...
我也不知道有木有这种东西,先看看我的过程
最开始:
$field = ['aa', 'bb', .......];#十几二十之多$data = array();foreach($field as $v){            switch($v){            case "aa": $data[$v] = get_aa();break;            .......            }} 

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

#这样就免去很多判断了,问题来了
#这样的话需要事先声明很多$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);
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
有个问题,那实际应用中数组$f会特别大了,而且每个值都是匿名函数这东西,是不是特占内存,还是说我想多了,其实不用考虑的

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

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

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

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



感谢老大,
就这么搞了