我想在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::)关键字?
答案 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()
在父类从父类访问成员时起作用,反之亦然。
这是抽象的基本概念之一。你要做的事情绝对可以。如果你得到一个错误,它必须是一个有点监督的细节