访问对象的“受保护”部分

时间:2013-12-31 09:03:30

标签: php arrays object

我有一个存储对象的变量$customerData。当我执行print_r($customerData)时,我得到类似于下面的内容。

Balanced\Customer Object(
    [_collection_uris:protected] => Array(
        [reversals] => Array(
            [class] => Balanced\Reversal
            [uri] => /v1/customers/1234123412341234/reversals
        )
    )
    [_member_uris:protected] => Array(
        [source] => Array(
                [class] => Balanced\Card
                [uri] => /v1/customers/1234123412341234/cards/987698769876
            )
    )
    [_type] => customer
    [twitter] => twitterHandle
    [phone] => 5551231234
)

我在访问uri内的_member_uris:protected时遇到问题。

print_r($customerData->_member_uris:protected); #Throws error "unexpected ':'"
print_r($customerData->_member_uris); #Throws error " Undefined property"
print_r($customerData['_member_uris']); #Throws error "Cannot use object of type array"

访问该部分对象的过程是什么?

2 个答案:

答案 0 :(得分:1)

您无法从全局代码或常规函数访问受保护或私有属性。来自Visibility的文档:

  
      
  • 声明公开的类成员可以随处访问。
  •   
  • 声明受保护的成员只能在类本身以及继承和父类中访问。
  •   
  • 声明为私有的成员只能由定义该成员的类访问。
  •   

答案 1 :(得分:1)

声明受保护的成员只能在类本身以及继承和父类中访问。您可以使用setAccessible()在类中添加一个方法来获取它,例如:

//function inside your class
public static function getProtectedProp($class, $propName) {
    $reflClass = new ReflectionClass($class);
    $property = $reflClass->getProperty($propertyName);
    $property->setAccessible(true);     
    return $property->getValue($class);
}

你可以这样做:

getProtectedProp($someClassObject, 'protectedPropertyName');

来源:: Reading Protected Property