如何通过访问修饰符过滤属性
How to filter properties by access modifier
所以我想仅从 class.
中输出 public 的属性
class MyClass
{
$public $var1, $var2, var3;
$private $pVar1, $pVar2, pVar3;
//outputs all variables and their values
//lets assume they are all defined
function outputPublic()
{
foreach($this as $key=>$val)
echo $key . ' : ' . $val . '<br>';
}
}
我已经通过使用外部函数循环访问 class 的实例来实现此功能,但我想知道如何从内部执行此操作。
有没有办法获得访问修饰符?
从外部检索 public 属性的示例
$obj = new MyClass();
foreach($obj as $key=$val)
echo $key . ' : ' . $val;
有不同的方式。您可以使用 get_object_vars
foreach(call_user_func('get_object_vars', $this) as $key => $val) {
echo $key . ' : ' . $val . '<br>';
}
或者您可以使用 ReflectionClass
$reflect = new ReflectionClass($this);
foreach($reflect->getProperties(ReflectionProperty::IS_PUBLIC) as $props) {
echo $props->getName() . ' : ' . $props->getValue($this) . '<br>';
}
我建议使用 ReflectionClass 而不是 get_object_vars,从 php 7 你会得到另一种行为。
所以我想仅从 class.
中输出 public 的属性class MyClass
{
$public $var1, $var2, var3;
$private $pVar1, $pVar2, pVar3;
//outputs all variables and their values
//lets assume they are all defined
function outputPublic()
{
foreach($this as $key=>$val)
echo $key . ' : ' . $val . '<br>';
}
}
我已经通过使用外部函数循环访问 class 的实例来实现此功能,但我想知道如何从内部执行此操作。 有没有办法获得访问修饰符?
从外部检索 public 属性的示例
$obj = new MyClass();
foreach($obj as $key=$val)
echo $key . ' : ' . $val;
有不同的方式。您可以使用 get_object_vars
foreach(call_user_func('get_object_vars', $this) as $key => $val) {
echo $key . ' : ' . $val . '<br>';
}
或者您可以使用 ReflectionClass
$reflect = new ReflectionClass($this);
foreach($reflect->getProperties(ReflectionProperty::IS_PUBLIC) as $props) {
echo $props->getName() . ' : ' . $props->getValue($this) . '<br>';
}
我建议使用 ReflectionClass 而不是 get_object_vars,从 php 7 你会得到另一种行为。