абстрактный классовый конфликт в php - PullRequest
1 голос
/ 11 февраля 2010

У меня есть этот класс:

abstract class Hotel
{
    protected $util;

    function  __construct()
    {
        $this->util = new Utility();
    }

    function add(Validate $data, Model_Hotel $hotel){}

    function delete(){}

    function upload_image(array $imagedetails, $hotel_id){}
}

и класс, расширяющий его

class Premium extends Hotel
{
    function add(Model_Hotel $hotel)
    {
        $hotel->values;
        $hotel->save();
    }

    function upload_image(array $imagedetails, $hotel_id)
    {
        $this->util->save_image($imagedetails, $hotel_id);
    }
}

но тогда я получаю ошибку:

"объявление Premium :: add должно быть совместимо с Hotel :: add"

как видите, я пропустил параметр для метода add (), который был преднамеренным

какое средство ООП позволило бы мне наследовать функцию, параметры которой я могу изменить? (Очевидно, что абстрактный класс здесь не подходит)

Ответы [ 2 ]

1 голос
/ 14 февраля 2010

Это ошибка E_STRICT.В PHP вы не можете перегружать методы (это искомая парадигма ООП), поэтому ваша подпись должна быть идентична абстрактной версии метода, иначе это ошибка.

0 голосов
/ 11 февраля 2010

Вы можете сделать ваш параметр $ data необязательным

class Hotel {
    function add( Model_Hotel $hotel, Validate $data = null );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...