php - 显示对象的所有公共(public)属性(名称和值)

标签 php class object attributes

This thread没有帮助我。

如果我用

$class_vars = get_class_vars(get_class($this));

foreach ($class_vars as $name => $value) {
    echo "$name : $value\n";
}

我明白了

attrib1_name : attrib2_name : attrib3_name

没有值。还显示了一个私有(private)属性,这是我不想要的。

如果我用

echo "<pre>";
print_r(get_object_vars($this));
echo "</pre>";

我明白了

数组 ( [attrib1_name] => attrib1_value [attrib2_name] => attrib2_value )

我又一次拥有一个私有(private)属性和所有子属性。但是这次我有了值(value)观。我怎样才能将其限制在一个级别?

是否可以显示所有公共(public)属性及其对象的值?

最佳答案

您看到的是非公共(public)属性,因为 get_class_vars 根据当前范围 工作。由于您使用的是 $this,您的代码位于类的内部,因此非公共(public)属性可以从当前范围访问。 get_object_vars 也是如此,这可能是一个更好的选择。

无论如何,一个好的解决方案是将检索属性值的代码移出类。

如果您不想为此创建一个自由函数(为什么?说真的,重新考虑一下!),您可以使用涉及匿名函数的技巧:

$getter = function($obj) { return get_object_vars($obj); };
$class_vars = $getter($this);

See it in action .

更新:由于您使用的是 PHP < 5.3.0,因此您可以使用以下等效代码:

$getter = create_function('$obj', 'return get_object_vars($obj);');
$class_vars = $getter($this);

关于php - 显示对象的所有公共(public)属性(名称和值),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10009015/

相关文章:

javascript - 遍历对象并删除空的

java - 当参数之一为 TBD 时,如何初始化对象

javascript - 使用 D3.JS 访问 JS 对象中的 'value'

php - 保存到 MySQL 的速度慢(PHP - Yii2)

java - 使用类将 arraylist 添加到数组适配器

php - 从打印 CSS 中删除 JS

python - 在类中模拟类实例

c++ - 为什么类成员函数不能接受多个与其类相同类型的参数

php - 无法弄清楚是什么导致我的网站出现横向滚动

javascript - VSCode 中的多个文件关联用于混合 PHP 和 JS 语法突出显示