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


0 Answers

编辑:当父类不包含属性相同的名称时,此答案仅适用于问题的修订版本1。

结合使用get_parent_classisset和变量变量 :

function isOwnStaticProperty($class, $property)
{
    $parent = get_parent_class($class);
    return isset($class::$$property) && ($parent === FALSE || !isset($parent::$$property));
}

这将检查$class是否有一个名为$property的静态属性,并且没有父类,或者父类没有这样的属性。

请注意isOwnStaticProperty的两个$ before property

这样称呼

echo isOwnStaticProperty('A', 'foo'); // TRUE
echo isOwnStaticProperty('A', 'bar'); // FALSE
echo isOwnStaticProperty('B', 'foo'); // FALSE
echo isOwnStaticProperty('B', 'bar'); // TRUE
Question

我有一个$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::$foo一个静态属性,还是它是一个继承的静态属性?

我需要以下结果:

$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()函数?




Related