抽象类无法实现?(PHP 5.2.9)
我的代码中是否有错误,或者我确实无法在抽象类中实现接口?我的代码不工作,PHP抛出错误: 致命错误:未找到类“Blah” 我的代码:抽象类无法实现?(PHP 5.2.9),php,interface,abstract-class,Php,Interface,Abstract Class,我的代码中是否有错误,或者我确实无法在抽象类中实现接口?我的代码不工作,PHP抛出错误: 致命错误:未找到类“Blah” 我的代码: interface IBlah { public function Fun(); } abstract class Blah implements IBlah { public function FunCommon() { /* CODE */ } abstract public function Fun(); } class Kok
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对不起@raina77哦,我太鲁莽了。你的答案是正确的,这对我帮助很大——我理解interface x抽象类,你的建议在将来会非常有用(我对你的+1仍然存在),但我在另一台机器上尝试过。今天,当我来上班并应用你的建议时,错误仍然出现。
我想给你更多的信息。首先,根据您的建议,我从抽象类中删除了“抽象公共函数Fun();”。第二件事是我的接口和抽象类在一个PHP文件中,而类Koko在另一个PHP文件中(如果我将类Koko移动到与接口和抽象类相同的文件中,则不会抛出错误)。
我试图打印已声明的接口-get_declared_interfaces(),以及已声明的类-get_declared_classes(),并打印出接口IBlah,但也没有打印出Koko。
当我将抽象类实现接口的声明更改为抽象类时(如上所述),Iblah、Blah和Koko都会被打印出来。不需要在抽象类中声明一个抽象函数,而抽象类已经在它实现的接口中声明了——您会得到一个错误(在中,看起来对待它有点不同): 无法继承抽象函数IBlah::Fun()(以前声明 摘要(废话) 解决方案:只需从一个抽象类中删除此声明-这
interface IBlah {
public function Fun();
}
abstract class Blah implements IBlah {
public function FunCommon() {}
}
class Koko extends Blah {
public function Fun() {}
}
…在和中都是有效代码,Koko
对象将被视为IBlah
对象。这很容易检查:
function t(IBlah $blah) {
var_dump($blah);
}
t(new Koko()); // object(Koko)#1 (0) {}
你能重现OP发布的错误吗?我不能。不,还有另一个错误:
不能继承抽象函数IBlah::Fun()(之前在Blah中声明了抽象)
是的,但OP提到它是PHP5.2-这就是为什么我选择了codepad
)看起来像是在5.4中更改的(甚至是5.3,需要检查它).谢谢你,伙计。。这是有道理的。我明白了,没问题。你能展示一下这些文件是如何包含进来的吗?再次非常感谢你,我在这方面有点害羞。你又对了(如果可以,我再给你+1:-)。我的“require_once”调用在错误的文件中。这是因为我正在修改别人的代码,但我没有意识到这一点。谢谢你,祝你今天愉快:-)。