У меня есть объект, который бросается в массив сеансов, и я хочу запустить foreach в свойстве items.
Кажется, я не могу получить к нему доступ. Я вижу, что это конфиденциально, но я не могу не задаться вопросом, почему var_dump может показать мне, что содержит свойство, но я не могу прочитать данные, поскольку он вызывает фатальную ошибку?
Я полагаю, что могу сделать некоторую буферизацию вывода и оценить var_dump как строку, если мне действительно понравится это, но похоже, что должен быть лучший метод. Любые идеи, как я могу получить доступ к файлам?
Код объекта var_dumped из var_dump($_SESSION['PHPurchaseCart'])
:
object(PHPurchaseCart)#191 (4) { ["_items:private"]=> array(2) { [0]=> object(PHPurchaseCartItem)#190 (6) { ["_productId:private"]=> string(2) "80" ["_quantity:private"]=> int(1) ["_optionInfo:private"]=> string(20) "Monthly Sponsorship " ["_priceDifference:private"]=> string(3) ".01" ["_customFieldInfo:private"]=> NULL ["_formEntryIds:private"]=> array(0) { } } [1]=> object(PHPurchaseCartItem)#189 (6) { ["_productId:private"]=> string(2) "75" ["_quantity:private"]=> int(1) ["_optionInfo:private"]=> string(20) "Monthly Sponsorship " ["_priceDifference:private"]=> string(3) ".02" ["_customFieldInfo:private"]=> NULL ["_formEntryIds:private"]=> array(0) { } } } ["_promotion:private"]=> NULL ["_promoStatus:private"]=> int(0) ["_shippingMethodId:private"]=> NULL }
Пути, к которым я пытался получить доступ:
$fun = $_SESSION['PHPurchaseCart']; var_dump($fun->_items); exit;
Вышеупомянутая ситуация вызывает фатальную ошибку.
Это идея частных свойств: вы не можете получить к ним доступ. Вы действительно не должны нарушать эту концепцию. Если вы действительно хотите получить доступ к такому свойству, отметка будет «общедоступной» в первоначальном определении класса.
Причина, по которой var_dump может получить доступ к ней, заключается в том, что она является внутренней функцией и имеет «власть» для просмотра всего объекта. Однако ваш код не имеет такой мощности.
Я бы не рекомендовал его, но если вам действительно нужно получить доступ к частной собственности, вы можете использовать PHP Reflection для его достижения.
Частные свойства, которые необходимы внешнему коду, обычно имеют общедоступный метод для их чтения, в этом случае это getItems()
.
$items = $_SESSION['PHPurchaseCart']->getItems();
Я вижу, что это конфиденциально, но я не могу не задаться вопросом, почему var_dump может показать мне, что содержит свойство, но я не могу прочитать данные, поскольку он вызывает фатальную ошибку?
Пожалуйста, поймите, что вы должны использовать методы getter и setter, как описано в выбранном ответе.
Но для завершения о том, почему и как его можно прочитать (может помочь в отладке). Ну, значение есть, но частные методы окружены NULL байтами (значение ASCII 0).
Поэтому, если вы действительно хотите увидеть это значение с помощью var_dump();
$key = "\0_items\0"; var_dump($fun->$key);