[英]How to return the access-modifier level of an Object's property in PHP?
说我有这堂课:
class Foo {
var $pu = 0;
private $pr = 1;
}
我需要找到一种方法来检查一个属性的访问修饰符级别,例如:
class Foo {
var $pu = 0;
private $pr = 1;
function return_all_public () {
$publics = [];
for (get_object_vars($this) as $key => $value) {
// if $this->{$key} is public then array_push($publics, $key);
}
return $publics;
}
}
这只是一个例子,功能不是我想要实现的,只是我想知道如何检查一个属性(public,protected或private?)的访问修饰符的级别。
使用ReflectionObject
:
foreach ((new ReflectionObject($this))->getProperties(ReflectionProperty::IS_PUBLIC) as $property) {
$publics[] = $property->getName();
}
甚至:
$publics = array_map(function (ReflectionProperty $property) {
return $property->getName();
}, (new ReflectionObject($this))->getProperties(ReflectionProperty::IS_PUBLIC));
参考文献:
http://php.net/manual/zh/class.reflectionobject.php
http://php.net/manual/en/reflectionclass.getproperties.php http://php.net/manual/en/class.reflectionproperty.php
编辑来澄清-不要使用它,它显然是一个错误,似乎已经在php版本7中得到修复。http ://codepad.viper-7.com/lyULdW (将版本更改为<= 5.6以查看其工作原理)
@deceze的答案是最可靠的,但是正如您指出的那样,在不实例化新对象的情况下偏爱函数调用:
class Foo
{
var $pu = 0;
private $pr = 1;
function return_all_public () {
return call_user_func('get_object_vars', $this);
}
}
这个作用域问题是功能还是错误尚不清楚!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.