PHP OO:覆盖抽象类的属性

时间:2011-04-28 15:26:13

标签: php oop

请有人建议吗?

我们有一个带有一些属性和一些方法的抽象基类。

从继承类调用方法(带参数),其目的通常是将传递的参数设置为基类的属性,除非它们看起来不会覆盖默认值。

如果我在abstract(base)类的构造函数中设置一个值(用于测试目的)它工作正常,并且传递给构造函数的任何其他东西都可以工作,但我们想要做的是获取setErrors方法来实际设置值属性。

示例:

//abstract base class

private $errors = array();//the property we want to overide

public function __construct()
{
$this->errors[] = "This is a required field";//for testing purposes only this works
}

public function setErrors($error)
{
var_dump($error);//this proves that $error is passing something...
$this->errors[] = $error;//this doesnt work(override the property)
var_dump($this->error);//the property now has the $error value...
}

public function getErrors()
{
return "<li>".implode("</li>\n",$this->errors);
}

我不确定这是否与基类是抽象的有关,即它没有被实例化。请有人解释为什么这不起作用? 提前感谢您的兴趣。

编辑 我们不是试图将私人财产从基础类别中继承下来

我们想要做的是使用set方法覆盖属性,然后使用公共get方法返回属性。

5 个答案:

答案 0 :(得分:5)

您将errors字段声明为私有字段,因此只有声明它的类(抽象超类)才能访问它。

您可以将其设为protected,以便子类可以访问它或在超类中实现setErrors方法。

答案 1 :(得分:0)

private个成员在继承的类中不可见。为此,您必须将可见性更改为protected

答案 2 :(得分:0)

您应该将$ errors声明为protected而不是private。详细了解Class and Objects visibility; - )

<强>更新

好的,也许我现在明白你的问题:P

尝试修改setErrors,如下所示:

    public function setErrors($error)
    {
        var_dump($error);//this proves that $error is passing something...
        $this->errors = (array) $error;//this works (override the property)
    }

答案 3 :(得分:0)

答案 4 :(得分:0)

基本上发生的是php会将新错误添加到当前错误数组中。 例如

$this->error[0]="this fie..." //default value
$this->error[1]=`$error       //the actual set error