请有人建议吗?
我们有一个带有一些属性和一些方法的抽象基类。
从继承类调用方法(带参数),其目的通常是将传递的参数设置为基类的属性,除非它们看起来不会覆盖默认值。
如果我在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方法返回属性。
答案 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)
我找到了可以帮到你的东西。我没有声称答案: - (
http://www.triconsole.com/php/oop.php
http://www.killerphp.com/tutorials/object-oriented-php/php-objects-page-4.php
答案 4 :(得分:0)
基本上发生的是php会将新错误添加到当前错误数组中。 例如
$this->error[0]="this fie..." //default value
$this->error[1]=`$error //the actual set error