2013-09-04 6 views
0

Как бы я мог обойти «защищенный», чтобы я мог выводить данные.Как сделать объект общедоступным?

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); 
} 
+1

Вы просматриваете методы, доступные для объекта Property –

+0

Как бы я это сделал. Я новичок в этом. –

+0

Возможно, вы ищете методы get, вы также можете реализовать __toString() или что-то вроде getData() как метод внутри класса и вернуть ему представление данных, которое вы хотите, поскольку вы можете получить доступ ко всем этим защищенным свойствам изнутри пример. – Gavin

ответ

1

Я не полностью понимаю ваш вопрос, но если вы хотите получить доступ защищенные свойства из-за пределов класса, вы должны использовать 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); 
+0

Невозможно получить доступ к вкладкам непубличного участника \ api \ property \ Property :: id –

+0

@Alex Это сообщение об ошибке? В какой строке вы его получили? Попробуйте ** обновленный ** скрипт. – ComFreek

+0

Это сообщение, которое выбрасывается да, я попытался обновить и тот же результат:/ –

1

Ваше название подразумевает, что вы хотите сделать -The класс (не объект) - общественный, в отличие от «внутреннего»/и т.д .. Все классы являются общедоступными в PHP.

В вашем вопросе говорится, что вы хотите обойти область методов/свойств (не согласны с заголовком). Вы не сказали, что попробовали. Вы также не указали, является ли это классом, который вы разработали или нет. Если у вас есть контроль над ним, добавьте метод freaking или два, чтобы вы могли получить данные. Если вы этого не сделаете, проверьте методы и/или попытайтесь отразить. Эти ответы применимы к каждому языку ООП.

Перед тем, как спросить других людей, прочтите документацию.

http://www.php.net/manual/en/language.oop5.basic.php

0

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

Что вы спрашиваете, как получить доступ к защищенным переменным-членам.

Взято отсюда (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() для любых свойств, к которым вы хотите получить доступ.

Смежные вопросы