抽象类构造函数压倒困惑

时间:2013-07-14 08:10:29

标签: php oop abstract-class

我有这个抽象类

 abstract class Guitar {

        protected $strings;

        public function __construct($no_of_strings) {
            $this->strings = $no_of_strings;
            echo 'Guitar class constructor is called <br/>';
        }

        abstract function play();
    }

和儿童班,

class Box_Guitar extends Guitar {

    public function __construct($no_of_strings) {
        echo 'Box Guitar constructor is called <br/>';
        $this->strings = $strings + 100;
    }

    public function play() {
        echo 'strumming ' . $this->strings;
    }

}

然后我用

启动了课程
$box_guitar = new Box_Guitar(6);

我的出局是

  

Box Guitar构造函数被称为

     

吉他类构造函数被称为

     

弹拨106

所以我的问题是为什么调用父构造函数?我没有使用Parent :: __ construct()。

2 个答案:

答案 0 :(得分:1)

不是。

当我运行上面给出的代码时,我得到了这个输出:

  

Box Guitar构造函数称为
  注意:未定义的变量:第19行/test/test.php中的字符串

仔细检查您是否未运行旧版本的文件或其他内容。您是否忘记保存或上传某些更改?


对于记录,一旦你弄清楚为什么你会得到意想不到的行为,编写Box_Guitar构造函数的正确方法可能看起来像这样:

public function __construct($no_of_strings) {
    echo 'Box Guitar constructor is called <br/>';
    parent::__construct($no_of_strings + 100);
}

答案 1 :(得分:0)

谢谢@jcsanyi。有我的错。我有另一个名为

的课程
 class Electric_Guitar extends Guitar {

    public function play() {
        return 'Plug to current : '. $this->strings;
    }
}

这没有任何构造函数。当我调用对象时,我使用了它们。

$box_guitar = new Box_Guitar(6);
$elec_guitar = new Electric_Guitar(5);

所以abstrct构造函数是由elec_guitar对象调用的。