奇葩的錯誤 速來人
<?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
2017-04-26
在PHP5以前的版本中,構造函數的名稱必須與類名相同,這種方法在PHP5中仍然可以使用,但現在已經很少有人用了。
PHP5以及之后的版本,構造函數用__construct()方法來聲明,這樣做的好處是可以使構造函數獨立于類名,當類名發生改變時不需要改相應的構造函數名稱了。
為了向下兼容,如果一個類中沒有名為__construct( )的方法,PHP將搜索一個與類名相同名的構造方法。
如果__construct( )的方法、與類名相同名的構造方法同時存在的話,優先使用__construct( )的方法。
綜上述,一樓正解。
2016-01-10
你這個抽象類和抽象類里面的函數名其實是一樣的,這樣就會被認為是它的構造函數,然后就會報錯了
改成這樣的吧,或者函數名換一個名字應該就可以了!