此代码失败。但我不明白为什么。如果我将函数lol更改为其他任何函数,它就可以工作。如果我改变抽象的类,它也可以工作。请参阅此执行: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答案,命名空间类不再处理与构造函数同名的函数。 BUt非命名空间的类。仍然为什么不能在子实例中替换构造函数?
答案 0 :(得分:1)
检查以下代码:
abstract class Lol{
public function __construct() { // only one constructor is really needed
}
abstract public function lol($external = false);
}
class Crazy extends Lol{
public function __construct() { // only one constructor is really needed
}
public function Crazy() { // only one constructor is really needed
}
public function lol($external = false) {
echo 'lol';
}
}
$new = new Crazy();
$new->lol('fdgdfg');
它运作正常,为什么?
PHP对OOP不是很好,即使是最新版本,也有PHP4遗留,所以让我们试着了解你的代码的作用:
这就是你在new
期间收到错误的原因 - php真的找不到构造函数
现在检查上面的代码 - 它有3个构造函数,你可以有任何1,这个代码可以工作