php как получить доступ к массиву объектов

Как получить доступ к массиву элементов из следующего массива объектов

Cart66Cart Object ( [_items:Cart66Cart:private] => Array ( [2] => Cart66CartItem Object ( [_productId:Cart66CartItem:private] => 327 [_quantity:Cart66CartItem:private] => 3 [_optionInfo:Cart66CartItem:private] => [_priceDifference:Cart66CartItem:private] => 0 [_customFieldInfo:Cart66CartItem:private] => [_productUrl:Cart66CartItem:private] => http://localhost/odesk/cart66/fran-wilson-aloe-lip-care/ [_formEntryIds:Cart66CartItem:private] => Array ( ) ) [3] => Cart66CartItem Object ( [_productId:Cart66CartItem:private] => 368 [_quantity:Cart66CartItem:private] => 2 [_optionInfo:Cart66CartItem:private] => [_priceDifference:Cart66CartItem:private] => 0 [_customFieldInfo:Cart66CartItem:private] => [_productUrl:Cart66CartItem:private] => http://localhost/odesk/cart66/beauty-strokes-basic-shadow-brush/ [_formEntryIds:Cart66CartItem:private] => Array ( ) ) ) [_promotion:Cart66Cart:private] => [_promoStatus:Cart66Cart:private] => 0 [_shippingMethodId:Cart66Cart:private] => 13 [_liveRates:Cart66Cart:private] => Cart66LiveRates Object ( [toZip] => [weight] => [rates] => Array ( ) [_toCountryCode:protected] => ) ) 

    Что-то вроде этого может быть:

     $object->_items[index]->_productId 

    Но если _items является частным, вам понадобится публичный getter или mess с классами Reflection. Вы можете настроить доступ к частной собственности через ReflectionProperty. Попробуйте следующее:

      $reflectionObject = new ReflectionObject($yourObject); $property = $reflectionObject->getProperty('_items'); $property->setAccessible(true); $items = $property->getValue($yourObject); 

    Если вы должны получить доступ к собственному / защищенному классу, вы можете просто использовать магический метод __get . В этом случае отражение было бы за бортом. Независимо от того, действительно ли это означает, что разумный метод использования магических методов в этом случае зависит от вашей ситуации.

     class MyClass { private $_items; public function __get($prop) { if ($prop == '_items') { return $this->_items; } throw new OutOfBoundsException; } } 

    ОБНОВИТЬ

    После повторного чтения кажется, что вы просто хотите, чтобы ваш объект вел себя как массив. Для этого вам необходимо реализовать ArrayAccess и указать соответствующие методы для частного свойства $_items .

     class MyClass implements ArrayAccess { private $_items = array(); public function __construct() { $this->_items = array( "one" => 1, "two" => 2, "three" => 3, ); } public function offsetSet($offset, $value) { if (is_null($offset)) { $this->_items[] = $value; } else { $this->_items[$offset] = $value; } } public function offsetExists($offset) { return isset($this->_items[$offset]); } public function offsetUnset($offset) { unset($this->_items[$offset]); } public function offsetGet($offset) { return isset($this->_items[$offset]) ? $this->_items[$offset] : null; } } с class MyClass implements ArrayAccess { private $_items = array(); public function __construct() { $this->_items = array( "one" => 1, "two" => 2, "three" => 3, ); } public function offsetSet($offset, $value) { if (is_null($offset)) { $this->_items[] = $value; } else { $this->_items[$offset] = $value; } } public function offsetExists($offset) { return isset($this->_items[$offset]); } public function offsetUnset($offset) { unset($this->_items[$offset]); } public function offsetGet($offset) { return isset($this->_items[$offset]) ? $this->_items[$offset] : null; } } 

    И, наконец , PHP поставляется со встроенным классом ArrayObject , который заставит объект вести себя очень похоже на массив. Вы всегда можете использовать это и указывать соответствующие методы в частном $_items .

    Попробуйте следующее:

     $object->$first_node->$second_node->$third_node;