东北小火
2016-01-10 08:34
<?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
在PHP5以前的版本中,构造函数的名称必须与类名相同,这种方法在PHP5中仍然可以使用,但现在已经很少有人用了。
PHP5以及之后的版本,构造函数用__construct()方法来声明,这样做的好处是可以使构造函数独立于类名,当类名发生改变时不需要改相应的构造函数名称了。
为了向下兼容,如果一个类中没有名为__construct( )的方法,PHP将搜索一个与类名相同名的构造方法。
如果__construct( )的方法、与类名相同名的构造方法同时存在的话,优先使用__construct( )的方法。
综上述,一楼正解。
你这个抽象类和抽象类里面的函数名其实是一样的,这样就会被认为是它的构造函数,然后就会报错了
改成这样的吧,或者函数名换一个名字应该就可以了!
PHP面向对象编程
70182 学习 · 362 问题
相似问题
回答 2
回答 1
回答 1
回答 1
回答 1