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

tes*_*ing 3 php attributes class object

这个帖子对我没有帮助.

如果我使用

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

foreach ($class_vars as $name => $value) {
    echo "$name : $value\n";
}
Run Code Online (Sandbox Code Playgroud)

我明白了

attrib1_name:attrib2_name:attrib3_name

没有价值观.还显示了一个私有属性,我不想要.

如果我使用

echo "<pre>";
print_r(get_object_vars($this));
echo "</pre>";
Run Code Online (Sandbox Code Playgroud)

我明白了

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

这里我再次拥有私有属性和所有子属性.但这次我有价值观.如何将此约束到一个级别?

是否有可能用对象的值显示所有公共属性?

Jon*_*Jon 5

你所看到的,因为非公开性质get_class_vars的作品,根据目前的范围.由于使用的是$this你的代码是内部类,因此本次非公开性质从当前范围访问.同样的,get_object_vars这可能是一个更好的选择.

在任何情况下,一个好的解决方案是将检索属性值的代码移出类.

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

$getter = function($obj) { return get_object_vars($obj); };
$class_vars = $getter($this);
Run Code Online (Sandbox Code Playgroud)

看到它在行动.

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

$getter = create_function('$obj', 'return get_object_vars($obj);');
$class_vars = $getter($this);
Run Code Online (Sandbox Code Playgroud)