我有$class_name = 'B';
并且:
class A
{
static $foo = 42;
static $baz = 4;
}
class B extends A
{
static $bar = 2;
static $baz = 44;
}
我怎么知道$class_name::$foo
是否是$ class_name的静态属性,或者它是否是继承的静态属性?
我需要以下结果:
$class_name = 'A';
isOwnStaticProperty($class_name, 'foo'); //TRUE : is a static property of this class
$class_name = 'B';
isOwnStaticProperty($class_name, 'foo'); //FALSE : is NOT a static property of this class
$class_name = 'B';
isOwnStaticProperty($class_name, 'bar'); //TRUE : is a static property of this class
$class_name = 'A';
isOwnStaticProperty($class_name, 'bar'); //FALSE : is NOT a static property of this class
$class_name = 'B';
isOwnStaticProperty($class_name, 'baz'); //TRUE : is a static property of this class
$class_name = 'A';
isOwnStaticProperty($class_name, 'baz'); //TRUE : is a static property of this class
如何实现isOwnStaticProperty()
功能?
答案 0 :(得分:7)
您可以使用方法ReflectionClass的getProperties来检索反射的属性。要过滤,您可以使用ReflectionProperty
checkboxes.click(function()
{
doCheckboxLogic();
});
输出:
TRUE
FALSE
TRUE
FALSE
TRUE
是的
答案 1 :(得分:4)
将get_parent_class
与isset
and variable variables结合使用:
function isOwnStaticProperty($class, $property)
{
$parent = get_parent_class($class);
return isset($class::$$property) && ($parent === FALSE || !isset($parent::$$property));
}
检查$class
是否有一个名为$property
的静态属性,并且没有父类,或者父类没有这样的属性。
请注意$
中property
之前的两个isOwnStaticProperty
。
称之为
echo isOwnStaticProperty('A', 'foo'); // TRUE
echo isOwnStaticProperty('A', 'bar'); // FALSE
echo isOwnStaticProperty('B', 'foo'); // FALSE
echo isOwnStaticProperty('B', 'bar'); // TRUE