foreach循环的问题

#1 SunPSP

dump($block['value']);
得到结果:spSelect('sunp_menu',$columns,$condition,$end)
也就是$block['value'] = spSelect('sunp_menu',$columns,$condition,$end)
那么
$this->$block['uuid'] = spClass($block['module'])->$block['value'];
等价于
$this->$block['uuid'] = spClass($block['module'])->spSelect('sunp_menu',$columns,$condition,$end);
是否成立?
我在写的时候发现如果写成
$this->$block['uuid'] = spClass($block['module'])->spSelect('sunp_menu',$columns,$condition,$end);
那么是可以正常执行的
而写成
$this->$block['uuid'] = spClass($block['module'])->$block['value'];
就无法执行了,这是为啥?

dumpSql()发现
$this->$block['uuid'] = spClass($block['module'])->$block['value'];
情况下,返回的SQL是空的
$this->$block['uuid'] = spClass($block['module'])->spSelect('sunp_menu',$columns,$condition,$end);
执行了SQL:SELECT * FROM sunp_menu
这也是需要执行的,目标达成

现在的需求是
foreach($blocks as $block){
   $this->$block['uuid'] = spClass($block['module'])->$block['value'];
  }
$blocks从数据库中取出,然后通过foreach逐个组装获取
$this->$block['uuid'] = spClass($block['module'])->spSelect($table,$columns,$condition,$end);
这样链式语句然后获得结果

2013-09-08 23:47:29

#2 jake

spSelect是什么?

按你说的,有个点错了:
spClass($block['module'])->$block['value']; 这是调用一个变量
spClass($block['module'])->spSelect('sunp_menu',$columns,$condition,$end); 这是调用一个方法
肯定是不等价的,除非
spClass($block['module'])->$block['value'](); 这才是调用一个方法,但是php5.3以下是不支持闭包,所以这样写一定要是5.3以上才成立。

2013-09-09 08:25:38

#3 SunPSP

jake 发表于 2013-9-9 08:25
spSelect是什么?

按你说的,有个点错了:
谢谢J大科普,明白问题出哪了

spSelect是我根据findAll改的一个方法,因为不太习惯SP提供的多表联查功能
个人更喜欢直接暴力的SQL,spSelect中直接加入了贮存表参数$storage
这个直接就是一个字符串,是SQL中的表名部分+连表比分,JOIN什么的连表直接写里面了
这样在需要的时候可以写好SQL,然后直接分割SQL传到这个方法里面
比如$storage = 'sunp_subject_map a LEFT JOIN sunp_subject_block b ON a.block = b.uuid';
直接将FROM后面部分连表的语句赋值到$storage中,相对来说组装SQL更直接暴力,也更直观些
其他的基本照搬了findAll

2013-09-09 23:06:26