重写方法被调用两次

Moh*_*sal 4 php oop abstract-class overriding function

我有一个代码片段

<?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();
Run Code Online (Sandbox Code Playgroud)

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

ideone的参考链接

Sha*_*ran 5

PHP脚本语言不区分大小写.(虽然不适用于变量)

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

当你这样做..

$t = new Test();
Run Code Online (Sandbox Code Playgroud)

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

来自PHP文档 ..

为了向后兼容,如果PHP 5找不到给定类的__construct()函数,并且该类没有从父类继承,则它将按类的名称搜索旧式构造函数.