Php 为什么var#u dump可以确定私有变量的值,但它可以';t尝试访问单个属性时

Php 为什么var#u dump可以确定私有变量的值,但它可以';t尝试访问单个属性时,php,object,private-members,var-dump,Php,Object,Private Members,Var Dump,我有一个对象正在抛出到会话数组中,我想运行foreach 在items属性上 我似乎无法访问它。我看到它是私有的,但我不禁想知道,为什么var_dump可以向我显示属性包含的内容,但我无法读取数据,因为它抛出了一个致命错误 我想如果我真的需要的话,我可以做一些输出缓冲,并将var_dump作为字符串进行计算,但似乎应该有更好的方法。你知道我如何访问_项目吗 从var\u转储($\u会话['PHPurchaseCart'])转储的对象代码var\u: 我尝试访问它的方式: $fun = $_SES

我有一个对象正在抛出到会话数组中,我想运行foreach 在items属性上

我似乎无法访问它。我看到它是私有的,但我不禁想知道,为什么var_dump可以向我显示属性包含的内容,但我无法读取数据,因为它抛出了一个致命错误

我想如果我真的需要的话,我可以做一些输出缓冲,并将var_dump作为字符串进行计算,但似乎应该有更好的方法。你知道我如何访问_项目吗

var\u转储($\u会话['PHPurchaseCart'])转储的对象代码var\u

我尝试访问它的方式:

$fun = $_SESSION['PHPurchaseCart'];
var_dump($fun->_items);
exit;

上面抛出了一个致命错误。

这就是私有属性的概念:您无法访问它们。你真的不应该打破这个观念。如果确实要访问此类属性,则在原始类定义中将标记为“public”

var_dump之所以可以访问它,是因为它是一个内部函数,并且它具有查看整个对象的“能力”。但是,您的代码没有这种能力


我不建议这样做,但如果您确实需要访问私有属性,您可以使用来实现它。

外部代码所需的私有属性通常有一个公共方法来读取它们,在本例中是
getItems()

我看到它是私有的,但我不禁想知道,为什么var_dump可以向我显示属性包含的内容,但我无法读取数据,因为它抛出了一个致命错误

请理解您应该使用所选答案中解释的getter和setter方法

但是为了完成为什么以及如何读取它(可能有助于调试)。值在那里,但是私有方法被空字节包围(ASCII值0)

因此,如果您真的想通过
var_dump()查看该值


var_dump查看对象内部。如果你也想这么做,可以使用反射。实际上,我没有为这个对象编写代码,但是我在它上面使用了get_class_方法,并找到了一个内部函数来满足我的需要,这基本上就是你想要我添加的(:oooo!我不知道关于反射的事。谢谢你指点我!是的,我在发帖后在上面做了一个get_class_方法来找到它。但是我仍然对var_dump的事情很好奇。反射看起来很有趣。
$fun = $_SESSION['PHPurchaseCart'];
var_dump($fun->_items);
exit;
$items = $_SESSION['PHPurchaseCart']->getItems();
$key = "\0_items\0";
var_dump($fun->$key);