PHP代码对我不了解。请解释

时间:2012-04-26 04:13:17

标签: php arrays api associative-array

$arr = NSZone::find_all(array('per_page'=>20, 'page'=>1));  

返回结果是

 [0] => NSZone Object
        (
            [xml_skip_attribs:protected] => Array
                (
                    [0] => id
                )

            [vals:protected] => Array
                (
                    [total_count] => 3
                )
        )

他正在访问

arr[0]['vals:protected']['total_count'] in this way arr[0]->total_count()  

这意味着total_count()是一个函数,而根据数组结构,它看起来像数组索引。 请解释一下这段代码,它是如何工作的?什么是[vals:protected],它可以是公共的,私有的等等,还有你知道的更多解释吗?

2 个答案:

答案 0 :(得分:2)

根据输出,arr[0]是一个对象(NSZone),显然有一个total_count方法返回您在[total_count]中看到的值。

即使您看到protected范围解析,因为total_countNSZone类的假定成员变量,它可用于total_count方法。

答案 1 :(得分:2)

这不是数组而是NSZone 对象print_r($arr),如果您不在类中意味着您在与使用print_r($ arr)相同的范围内访问它并且属性设置为private / protected,如果您在其外部,则无法访问对象中的值,您需要添加排序的getter,或将其更改为public。

如果使用__get()魔术方法的课程,您可以像以下方式访问它: $arr->total_count;

或者您可以添加一个方法来获取它,并像以下一样访问它:$arr->getCount();

public function getCount(){
  return $this->vals->total_count;
}

但是没有看到课程,很难说,所以我可以完全退出。