как бы я мог обойти «защищенный», чтобы я мог выводить данные.
tabs\api\property\Property Object ( [id:protected] => 90_4_HH [propertyRef:protected] => 90_4 [brandCode:protected] => HH [url:protected] => http://hh.api.carltonsoftware.co.uk/property/90_4_HH [accountingBrand:protected] => HH [slug:protected] => 90-4-hh [name:protected] => Carreg Lwyd Farmhouse [address:protected] => tabs\api\core\Address Object ( [addr1:protected] => Port Eynon [addr2:protected] => [town:protected] => Gower [county:protected] => Swansea [postcode:protected] => SA3 1NN [country:protected] => GB ) [changeOverDay:protected] => Saturday [calendar:protected] => http://hh.api.carltonsoftware.co.uk/property/90_4_HH/calendar [booking:protected] => http://hh.api.carltonsoftware.co.uk/booking [pets:protected] => [promote:protected] => [smoking:protected] => [shortlist:protected] => [accommodates:protected] => 12 [rating:protected] => 5 [bedrooms:protected] => 6 [images:protected] => Array ( [90_4p1190276.jpg?APIKEY=homefromhome&hash=31b3f7b1b377184e8cb8fb64d434a11a4c3446c1091535ef6db4e119689a6372] => tabs\api\property\Image Object ( [filename:protected] => 90_4p1190276.jpg?APIKEY=homefromhome&hash=31b3f7b1b377184e8cb8fb64d434a11a4c3446c1091535ef6db4e119689a6372 [title:protected] => Carreg Lwyd Farmhouse, Port Eynon [alt:protected] => The Lounge [url:protected] => http://hh.api.carltonsoftware.co.uk/image/normal/1000x750/90_4p1190276.jpg [height:protected] => 750 [width:protected] => 1000 [apiPath:protected] => http://hh.api.carltonsoftware.co.uk ) [90_4img_4819.jpg?APIKEY=homefromhome&hash=31b3f7b1b377184e8cb8fb64d434a11a4c3446c1091535ef6db4e119689a6372] => tabs\api\property\Image Object (
Свалка:
foreach ($properties as $property) { echo sprintf('<p class="listit">%s</p>', $property); print_r($property); }
Я не совсем понял ваш вопрос, но если вы хотите получить доступ к защищенным свойствам вне класса, вам нужно использовать Reflection:
$reflObj = new ReflectionObject($property); $props = $reflObj->getProperties(ReflectionProperty::IS_PROTECTED); foreach ($props as $prop) { $prop->setAccessible(true); echo $prop->getName() . ":" . $prop->getValue($property), "\n"; }
Образец для вывода адреса:
$reflObj = new ReflectionObject($property); $addrProp = $reflObj->getProperty('address'); $addrProp->setAccessible(true); echo $addrProp->getValue($property);
Ваше название подразумевает, что вы хотите сделать – класс (не объект) – общедоступным, в отличие от «внутреннего» / etc. Все классы общедоступны в PHP.
В вашем вопросе говорится, что вы хотите обойти область методов / свойств (не согласны с заголовком). Вы не сказали, что попробовали. Вы также не указали, является ли это классом, который вы разработали или нет. Если у вас есть контроль над ним, добавьте метод freaking или два, чтобы вы могли получить данные. Если вы этого не сделаете, проверьте методы и / или попытайтесь отразить. Эти ответы применимы к каждому языку ООП.
Прежде чем обращаться к другим людям, прочтите документацию.
Ответ на вопрос, заданный заголовком, состоит в том, что все классы являются общедоступными.
Вы спрашиваете, как получить доступ к защищенным переменным-членам.
Взятый отсюда ( http://ajmm.org/2011/06/using-php-reflection-to-read-a-protected-property/ ), это пример того, как это сделать:
public static function getReflectedPropertyValue($class, $propertyName) { $reflectedClass = new ReflectionClass($class); $property = $reflectedClass->getProperty($propertyName); $property->setAccessible(true); return $property->getValue($class); } ... getReflectedPropertyValue($yourObject, 'protectedProperty');
Тем не менее, вопрос в том, почему вы хотите это сделать. Участники отмечены специально защищенными, чтобы вы этого не делали. Если у вас есть доступ к исходному коду, который определяет этот другой класс, тогда может возникнуть смысл либо изменить эти члены на «общедоступные», либо (лучше), чтобы предоставить метод getXYZ () для любых свойств, к которым вы хотите получить доступ.