PHP代码对我来说不明白.请解释一下


PHP code not understand to me. Please explain

$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],它也可以是公共的,私人的等,请问您知道更多解释吗?

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

如果类使用 __get() 魔术方法,您可以像这样访问它: $arr->total_count;

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

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

但是没有看到班级,很难说,所以我可以完全出局。

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

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