为了账号安全,请及时绑定邮箱和手机立即绑定

奇葩的错误 速来人

<?php

abstract class Eat

{

abstract public function eat($food);

public function breath()

{

echo 'Breathing'.'<br />';

}

}

class Human extends Eat

{

public function eat($food)

{

echo 'Human eat'.$food.'<br />';

}

}

class Animal extends Eat

{

public function eat($food)

{

echo 'Animal eat'.$food.'<br />';

}

}

$monkey = new Animal();

$monkey->eat('apple');

?>

Fatal error: Cannot call abstract method Eat::eat() in D:\xampp\htdocs\oop\abstrct.class.php on line 25

正在回答

2 回答

在PHP5以前的版本中,构造函数的名称必须与类名相同,这种方法在PHP5中仍然可以使用,但现在已经很少有人用了。
PHP5以及之后的版本,构造函数用__construct()方法来声明,这样做的好处是可以使构造函数独立于类名,当类名发生改变时不需要改相应的构造函数名称了。
为了向下兼容,如果一个类中没有名为__construct( )的方法,PHP将搜索一个与类名相同名的构造方法。
如果__construct( )的方法、与类名相同名的构造方法同时存在的话,优先使用__construct( )的方法。

综上述,一楼正解。

0 回复 有任何疑惑可以回复我~

你这个抽象类和抽象类里面的函数名其实是一样的,这样就会被认为是它的构造函数,然后就会报错了

http://img1.sycdn.imooc.com//5691e7e1000138c209660759.jpg

改成这样的吧,或者函数名换一个名字应该就可以了!

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

奇葩的错误 速来人

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信