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
}
我试图访问它的方式:
$fun = $_SESSION['PHPurchaseCart'];
var_dump($fun->_items);
exit;
以上引发致命错误.
这就是私有财产的想法:你无法访问它们.你真的不应该打破这个概念.如果您确实想要访问此类属性,则标记在原始类定义中为"public".
var_dump可以访问它的原因是因为它是一个内部函数,它具有查看整个对象的"能力".但是,您的代码没有这种能力.
我不推荐它,但如果你真的需要访问私有属性,你可以使用PHP Reflection来实现它.