我有点恼火,为什么第二个代码抛出一个异常,而第一个则没有。
self :: ID_FALLBACK为1
在ID为1、2 ...的部分中有2行或更多行;全部与Sectiongroup_id = 1
节组中的ID为1的一行
这可以正常工作:
public static function getSections(){
// select groups with sections
foreach(ORM::factory('Sectiongroup')->find_all() as $grp){
$s = $grp->sections->where('id', '>', self::ID_FALLBACK)->find_all()->as_array('id', 'name');
count($s) && $sections[$grp->name] = $s;
}
return $sections;
}
下一个抛出:
第
Cannot use object of type Model_Sectiongroup as array
行中的count($s) && $section..
public static function getSections(){
// select groups with sections
$sections = ORM::factory('Sectiongroup');
foreach($sections->find_all() as $grp){
$s = $grp->sections->where('id', '>', self::ID_FALLBACK)->find_all()->as_array('id', 'name');
count($s) && $sections[$grp->name] = $s;
}
return $sections;
}
在Sectiongroup中有2行的相同错误现在应该是一个数组:
public static function getSections(){
// select userdefined groups with sections
$sections = ORM::factory('Sectiongroup');
foreach($sections->find_all()->as_array() as $grp){
$s = $grp->sections->where('id', '>', self::ID_FALLBACK)->find_all()->as_array('id', 'name');
count($s) && $sections[$grp->name] = $s;
}
return $sections;
}
这是什么奇怪的行为?
最佳答案
在您的第一个示例中,您从未明确定义$sections
数组,并且在您首次编写$sections[$grp->name] = $s
时,PHP会为您创建$sections
数组。
在最后两个示例中,您将$sections
显式声明为ORM::factory()
的返回值,更具体地说,是声明了ORM
的对象子类,您不能将其与数组下标([]
)一起使用。