Доступ к значению StdClass с помощью двоеточия: защищенный

Как получить доступ к значению stdClass с двоеточием «: protected»?

Например, у меня был этот $ obj с результатом:

object(Google_Service_Plus_PeopleFeed)#14 (11) { ["title"]=> string(30) "Google+ List of Visible People" ["totalItems"]=> int(4) ["collection_key:protected"]=> string(5) "items" ["data:protected"]=> array(1) { ["items"]=> array(2) { [0]=> array(7) { ["kind"]=> string(11) "plus#person" ["etag"]=> string(57) ""42gOj_aEQqJGtTB3WnOUT5yUTkI/1eNkvlfeTwXXldr9rYAvMcwM6bk"" ["objectType"]=> string(6) "person" 

Например, я попытался получить доступ к «добрым» значению, которое «плюс # человек», используя этот код:

 $kind = $obj->{'data:protected'}->items[0]->kind; //-> returns NULL //OR $kind = $obj->{data:protected}->items[0]->kind; //->returns error on ":" 

Ну, они, похоже, не работают … Любая идея, как получить доступ к этим защищенным данным?

благодаря

Это не объект stdClass , это объект класса Google_Service_Plus_PeopleFeed . Вы не можете получить доступ к защищенным свойствам класса [легко]. Если класс не хочет, чтобы вы обращались к данным, вам не следует. Но обычно класс предлагает некоторый метод, который вы можете вызвать для получения данных, например $obj->getData() или некоторые из них. Посмотрите на определение класса или его документацию, чтобы узнать, как вы должны использовать этот класс.

Вы не можете получить доступ к защищенному свойству извне этого объекта. Посмотрите http://www.php.net/manual/en/language.oop5.visibility.php

Ну, я могу, наконец, получить к нему доступ:

 $kind = $obj['data']['items'][0]['kinds']; 

Кто-нибудь может объяснить, почему? Просто любопытно, почему его нужно защищать>. <

Обратите внимание, что, вероятно, есть причина, по которой эти свойства защищены, поэтому вы должны подумать дважды, прежде чем пытаться получить к ним доступ.

Если вам нужно получить доступ к защищенным переменным, вы можете использовать Reflection, но может быть проще. Связывая замыкание с объектом, вы должны иметь доступ к защищенным переменным из замыкания:

 class X { protected $a = 10; public $b = 20; } $closure = function() { return get_object_vars($this); }; $result = Closure::bind($closure, new X(), 'X'); var_dump($result());