简体   繁体   English

php如何访问对象数组

[英]php how to access object array

How to access the item array from the following object array 如何从以下对象数组访问item数组

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

)

If you must access a private/protected class property you can simply use the magic __get method . 如果必须访问private / protected class属性,则只需使用magic __get方法即可 Reflection would be way overboard in this case. 在这种情况下,反思会过于夸张。 Whether or not it makes good design sense to use the magic methods in this case depends on your situation, though. 但是,在这种情况下使用魔术方法是否具有良好的设计意义取决于您的情况。

class MyClass
{
    private $_items;

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

UPDATE UPDATE

After re-reading it seems you simply want your object to behave like an array. 重新阅读之后,您似乎只希望对象的行为类似于数组。 To do this you'll need to implement ArrayAccess and point the relevant methods to the private $_items property. 为此,您需要实现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;
    }
}

And finally , PHP comes with a built-in ArrayObject class that will make an object behave very much like an array. 最后 ,PHP附带了一个内置的ArrayObject类,它将使对象的行为与数组非常相似。 You could always use that and point the relevent methods at a private $_items property. 您可以始终使用它并将相关方法指向私有$_items属性。

Something like this maybe: 这样的事情可能是:

$object->_items[index]->_productId

But if _items is private you will need a public getter or mess with the Reflection classes. 但是如果_items是私有的,你将需要一个公共的getter或者使用Reflection类。 You can set the the private property to be accessible through ReflectionProperty Try this: 您可以通过ReflectionProperty设置可以访问的私有属性试试这个:

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

请尝试以下方法:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM