php como acessar a matriz de objects

Como acessar a matriz de itens da matriz de objects a seguir

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] => ) ) 

Algo assim talvez:

 $object->_items[index]->_productId 

Mas se o site for privado, você precisará de um getter público ou da bagunça com as aulas de Reflexão. Você pode configurar a propriedade privada para ser acessível através do ReflectionProperty Experimente isso:

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

Se você deve acessar uma propriedade de class privada / protegida, você pode simplesmente usar o método mágico __get . A reflection ficaria bem na borda neste caso. Seja ou não, faz com que o bom senso do design para usar os methods mágicos neste caso, depende da sua situação, no entanto.

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

ATUALIZAR

Depois de re-ler, parece que você simplesmente quer que seu object se comporte como uma matriz. Para fazer isso, você precisará implementar o ArrayAccess e apontar os methods relevantes para a propriedade privada $_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; } } 

E, finalmente , o PHP vem com uma class incorporada ArrayObject que fará com que um object se comporte como uma matriz. Você sempre pode usar isso e apontar os methods $_items propriedade $_items privada.

Experimente o seguinte:

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