重写方法被调用两次

时间:2014-04-09 11:00:31

标签: php function oop abstract-class override

我有一个代码段

<?php

abstract class Testing{
    public abstract function tester();

    public function testing(){
        $this->tester();
    }
}

class Test extends Testing{
    public function tester(){
        echo 'test';
    }
}

$t = new Test();
$t->testing();

我应该有一个输出test,但我得到的输出是testtest
为什么tester()被调用两次?

参考link to ideone

1 个答案:

答案 0 :(得分:5)

PHP脚本语言不区分大小写。不适用于变量

由于您的child类没有任何构造函数,因此会触发父类构造函数。

当你这样做时..

$t = new Test();

触发父类构造函数,即public function testing(),(查看类匹配的名称

来自PHP Docs ..

  

为了向后兼容,如果PHP 5找不到__construct()   给定类的函数,并且该类没有从a继承   父类,它将搜索旧式构造函数,   通过班级的名字。