PHP代码对我不了解。 请解释[关闭]

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

return result is

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

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

he is accessing

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

That's mean total_count() is a function whereas according to array structure its look like array index. Please Explain me this code, how it work? What is [vals:protected] and can it be public, private etc as well, Any more explanation you know please?

That is not an array but a print_r($arr) of the NSZone Object, if your not in the class meaning your accessing it in the same scope as your using print_r($arr) and the property's are set to private/protected then you cannot access the values within the object if your outside of it, you would need to add a getter of sort, or change it to public.

If the class using a __get() magic method you maybe could access it like: $arr->total_count;

or you could add a method to get it, and access it like:$arr->getCount();

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

But without seeing the class, its hard to tell, so I could be completely out.

According to the output, arr[0] is an object (NSZone), which obviously has a total_count method returning the value you see in [total_count].

And even though you see the protected scope resolution, because total_count is an assumed member variable of the NSZone class it is available to the total_count method.