0

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

public function setProperties($array = null) {

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

    }

我不太确定的是我是否能够在从这个抽象类继承的类中使用它来设置继承的属性以及特定的子类。

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

4

2 回答 2

1

$this是特定于实例的,因此property_exists可以与子类一起正常工作。

于 2013-02-01T21:36:38.920 回答
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()当子类从父类访问成员时有效,反之亦然,当父类试图访问子类的成员时。

这是抽象的基本概念之一。您正在尝试做的事情绝对没问题。无论如何,如果您遇到错误,那一定是一些被监督的细节

于 2013-02-01T21:43:08.383 回答