我想在基类中定义一次方法,并在类层次结构中的后续构造函数中调用它。每次调用它时,我希望它对调用它的类的属性进行操作。
例如,a是基类,这里定义了方法。B从A继承,C从B继承。
当我实例化具体的类c时,构造函数将调用基类方法,我希望它对c的属性进行操作(这将是一个私有数组,我将在初始化时填充它)。
然后,c的构造函数调用parent::__construct
。当b构造函数调用基类方法时,该方法应该对b的属性进行操作。在b构造函数完成之前,它将调用parent::_construct
,而a构造函数将对a的属性进行操作。
我在调查lsb,但它不能正常工作,因为parent::__construct
是一个转发呼叫。我试着用get_parent_class()
的结果代替parent::
,但是我对static::propertyName
的调用出错了,因为propertyName
不是常量。
我该怎么做?
编辑:下面是一个代码示例。下面的代码输出“pqpqpq”。我要它输出“pqrstu”。
class A {
private $property = array('P','Q');
function __construct() {
$this->myMethod();
}
public function myMethod() {
foreach ($this->property as $value) {
echo $value . " ";
}
}
}
class B extends A {
private $property = array('R','S');
function __construct()
{
parent::__construct();
$this->myMethod();
}
}
class C extends B {
private $property = array('T','U');
function __construct()
{
parent::__construct();
$this->myMethod();
}
}
$c = new C();
最佳答案
据我所知这是不可能的。在private的情况下,变量对方法不可用,在public/protected的情况下,变量被覆盖。
通过考试你能得到你想要的结果
$this->property
在每个mymethod调用中-
$this->myMethod($this->property)
并相应地更改mymethod定义。