如何知道静态属性是否在php中继承?

时间:2015-07-11 15:34:14

标签: php class oop inheritance static

我有$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()功能?

2 个答案:

答案 0 :(得分:7)

您可以使用方法ReflectionClassgetProperties来检索反射的属性。要过滤,您可以使用ReflectionProperty

checkboxes.click(function()
{
    doCheckboxLogic();
});

输出:

  

TRUE
  FALSE
  TRUE
  FALSE
  TRUE
  是的

答案 1 :(得分:4)

编辑:当父类不包含同名的属性时,此答案仅对问题的修订版#1有效。

get_parent_classisset 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