我有一个存储对象的变量$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"
访问该部分对象的过程是什么?
答案 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');