奇葩的错误 速来人

来源:4-8 抽象类-PHP面向对象编程

东北小火

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

写回答 关注

2回答

  • Wseek
    2017-04-26 00:05:44

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

    综上述,一楼正解。

  • 乔帮主
    2016-01-10 13:11:38

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

    http://img.mukewang.com/5691e7e1000138c209660759.jpg

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

PHP面向对象编程

从容应对面试官的知识宝典,带你握面向对象的最重要的核心能力

70182 学习 · 362 问题

查看课程

相似问题