我有点恼火,为什么第二个代码抛出一个异常,而第一个则没有。
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的对象子类,您不能将其与数组下标([])一起使用。

10-08 07:41