Roo*_*ter 3 php object var-dump private-members
我有一个对象被抛入会话数组,我想在items属性上运行foreach.
我似乎无法访问它.我看到它是私有的,但我不禁想知道为什么var_dump可以告诉我属性包含什么但我无法读取数据,因为它会抛出一个致命的错误?
我想我可以做一些输出缓冲并将var_dump评估为字符串,如果我真的不得不喜欢这个,但似乎应该有一个更好的方法.我有什么想法可以访问_items?
目标代码var_dumped来自var_dump($_SESSION['PHPurchaseCart']):
object(PHPurchaseCart)#191 (4) {
["_items:private"]=>
array(2) {
[0]=>
object(PHPurchaseCartItem)#190 (6) {
["_productId:private"]=>
string(2) "80"
["_quantity:private"]=>
int(1)
["_optionInfo:private"]=>
string(20) "Monthly Sponsorship "
["_priceDifference:private"]=>
string(3) ".01"
["_customFieldInfo:private"]=>
NULL
["_formEntryIds:private"]=>
array(0) {
}
}
[1]=>
object(PHPurchaseCartItem)#189 (6) {
["_productId:private"]=>
string(2) "75"
["_quantity:private"]=>
int(1)
["_optionInfo:private"]=>
string(20) "Monthly Sponsorship "
["_priceDifference:private"]=>
string(3) ".02"
["_customFieldInfo:private"]=>
NULL
["_formEntryIds:private"]=>
array(0) {
}
}
}
["_promotion:private"]=>
NULL
["_promoStatus:private"]=>
int(0)
["_shippingMethodId:private"]=>
NULL
}
Run Code Online (Sandbox Code Playgroud)
我试图访问它的方式:
$fun = $_SESSION['PHPurchaseCart'];
var_dump($fun->_items);
exit;
Run Code Online (Sandbox Code Playgroud)
以上引发致命错误.
这就是私有财产的想法:你无法访问它们.你真的不应该打破这个概念.如果您确实想要访问此类属性,则标记在原始类定义中为"public".
var_dump可以访问它的原因是因为它是一个内部函数,它具有查看整个对象的"能力".但是,您的代码没有这种能力.
我不推荐它,但如果你真的需要访问私有属性,你可以使用PHP Reflection来实现它.