このコードは失敗します。しかし、私はその理由を理解していません。関数 lol を他の関数に変更すると、機能します。Abstract のクラスを変更すると、それも機能します。この実行を参照してください: http://codepad.viper-7.com/Z9V67x
<?php
abstract class Lol{
abstract public function lol($external = false);
}
class Crazy extends Lol{
public function lol($external = false){
echo 'lol';
}
}
$new = new Crazy;
$new->lol('fdgdfg');
返されるエラーは次のとおりです。
Fatal error: Cannot call abstract method Lol::lol() in /code/Z9V67x on line 17
PHP Fatal error: Cannot call abstract method Lol::lol() in /code/Z9V67x on line 17
同じ名前の関数とクラスについて調査を行ったところ、PHP4 では同じ名前はコンストラクターを意味していました。このhttps://stackoverflow.com/a/6872939/582917の回答によると、名前空間付きのクラスは、コンストラクターと同じ名前の関数を扱わなくなりました。しかし、名前空間のないクラスはそうです。それでも、コンストラクターを子インスタンスで置き換えることができないのはなぜですか?