PHP:在Child类中调用Abstract方法内部调用property_exists()函数

时间:2013-02-01 21:32:56

标签: php abstract-class abstract

我想在Abstract类中创建如下所示的setProperties()方法:

public function setProperties($array = null) {

        if (!empty($array)) {
            foreach($array as $key => $value) {
                if (property_exists($this, $key)) {
                    $this->{$key} = $value;
                }
            }
        }

    }

我不太确定的是,我是否能够在继承自此Abstract类的类中使用它来设置继承的属性以及特定的子类。

我不确定我是否应该在property_exists()函数中使用任何其他关键字然后$ this - 也许有一种方法可以使用后期静态绑定(static::)关键字?

2 个答案:

答案 0 :(得分:1)

$this是特定于实例的,因此property_exists可以正常使用子类。

答案 1 :(得分:1)

您的代码基本上应该可行。想象一下这个简单的例子,输出两次true

abstract class A {

    protected $var1;

    public function exists1() {
        var_dump(property_exists($this, 'var2'));
    }

}

class B extends A {

    protected $var2;

    public function exists2() {
        var_dump(property_exists($this, 'var1'));
    }
}


$o = new B();

$o->exists1();
$o->exists2();

如您所见,当父类正在尝试访问子成员时,property_exists()在父类从父类访问成员时起作用,反之亦然。

这是抽象的基本概念之一。你要做的事情绝对可以。如果你得到一个错误,它必须是一个有点监督的细节