Неустранимая ошибка при расширении абстрактного класса в PHP - PullRequest
3 голосов
/ 09 ноября 2011

Я изучаю продвинутый уровень ООП PHP .. (Или я хочу научиться :))

Это мой код.

Выдержка:

<?php 
abstract class Karakter
{
    abstract public function isim($name);
    abstract public function yas($age);

    public function yazdir()
    {
        print $this->isim() . " " . $this->yas();
    }
}

class Insan extends Karakter
{
    public $isim;
    public $yas;
    public function isim()
    {
        return "Bu adamın ismi: " . $this->isim;
    }

    public function yas()
    {
        return "Bu adamın yaşı: " . $this->yas;
    }
}

Когда я запускаю этот код, я не могу победить. Я вижу эту ошибку:

Fatal error: Declaration of Insan::isim() must be compatible with that of Karakter::isim() in C:\AppServ\www\OOP\1.php on line 26

Ответы [ 2 ]

7 голосов
/ 09 ноября 2011

Вы определили функцию isim в абстрактном классе с одним параметром.

abstract public function isim($name);

Чтобы правильно реализовать эту функцию в любом подклассе, необходимо переопределить функцию ровно одним параметром:

class Insan extends Karakter {
    public function isim($name) {
       [..]
    }

    ...
}
2 голосов
/ 09 ноября 2011

В вашем абстрактном классе вы определили isim() для ожидания параметра.Но в классе расширения вы не следовали этому правилу.

Это определение:

abstract public function isim($name);

Но затем вы расширяете его следующим образом, без параметра:

public function isim()
...