我的代码中有什么问题,或者我真的无法在抽象类中实现接口?我的代码无效,PHP抛出错误:
致命错误:Class' Blah'找不到
我的代码:
interface IBlah {
public function Fun();
}
abstract class Blah implements IBlah {
public function FunCommon() {
/* CODE */
}
abstract public function Fun();
}
class Koko extends Blah {
public function Fun() {
/* CODE */
}
}
当我将代码更改为以下内容时,现在可以正常运行:
abstract class Blah {
public function FunGeneral() {
/* CODE */
}
abstract public function Fun();
}
我做错了吗?非常感谢你。
编辑:2014-04-01
对不起@ raina77ow,我太莽撞了。你的答案是正确的,它对我非常有帮助 - 我理解界面x抽象类,你的建议将来会非常有用(我的+1仍然存在),但我在另一台机器上尝试过。今天,当我来上班并且我应用你的建议时,错误仍然出现了。
我想向您提供更多信息。首先,我删除了#34;抽象公共函数Fun();"根据你的建议从我的抽象课。第二件事是我的接口和抽象类在一个PHP文件中,类Koko在另一个文件中(如果我将类Koko移动到与接口和抽象类相同的文件中,则不会抛出任何错误)。
/>
我尝试打印声明的接口 - get_declared_interfaces()和声明的类 - get_declared_classes(),并打印出接口IBlah,但Blah也没有打印出Koko。
当我将抽象类的实现接口的声明仅改为抽象类(如上所述)时,Iblah和Blah以及Koko都被打印出来。
答案 0 :(得分:3)
没有必要在抽象类中声明一个抽象函数,它已经在它实现的接口中声明了 - 你会得到一个错误(在PHP 5.2中,看起来像{ {3}}对待它有点不同):
不能继承抽象函数IBlah :: Fun()(之前已声明过) Blah摘要)
解决方案:只需从抽象类中删除此声明 - 这......
interface IBlah {
public function Fun();
}
abstract class Blah implements IBlah {
public function FunCommon() {}
}
class Koko extends Blah {
public function Fun() {}
}
...是PHP 5.3和PHP 5.2中的有效代码,Koko
个对象将被视为IBlah
个。这很容易检查:
function t(IBlah $blah) {
var_dump($blah);
}
t(new Koko()); // object(Koko)#1 (0) {}