Why can var_dump ascertain values of private variables, yet it can't when trying to access a single the property
我有一个对象被抛出到会话数组中,我想运行foreach在items属性上。
我好像不能进入。我看到它是私有的,但我禁不住想知道为什么var_dump可以向我显示属性包含的内容,但是我无法读取数据,因为它抛出了一个致命的错误?
如果我真的需要这样做的话,我想我可以做一些输出缓冲,并将var_dump作为一个字符串进行计算,但似乎应该有一个更好的方法。我有什么办法可以进入物品吗?
从
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | 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 } |
我尝试访问它的方式:
号
上面抛出了一个致命的错误。
这就是私有财产的概念:你不能访问它们。你真的不应该打破这个概念。如果确实要访问此类属性,则在原始类定义中标记为"public"。
var_dump之所以能够访问它,是因为它是一个内部函数,并且具有查看整个对象的"能力"。但是,您的代码没有这种能力。
我不建议这样做,但是如果您确实需要访问私有属性,可以使用PHP反射来实现它。
外部代码需要的私有属性通常有一个公共方法来读取它们,在本例中是
1 | $items = $_SESSION['PHPurchaseCart']->getItems(); |
I see that it's private, but I can't help but wonder why var_dump can show me what the property contains yet I can't read the data as it throws a fatal error?
号
请理解您应该使用所选答案中解释的getter和setter方法。
但要完成为什么以及如何读取它(可能有助于调试)。好吧,值在那里,但是私有方法被空字节(ASCII值0)包围。
所以如果你真的想用EDOCX1[1]看到这个值
1 2 |
号