php中的抽象类冲突

时间:2010-02-11 07:31:03

标签: php oop

我有这堂课:

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()方法的参数,这是有意的

什么OOP工具允许我继承一个我可以改变参数的函数? (显然抽象类不会在这里做)

2 个答案:

答案 0 :(得分:1)

这是E_STRICT错误。在PHP中你不能重载方法(这是你正在寻找的OOP范例),所以你的签名必须与方法的抽象版本相同,否则就是错误。

答案 1 :(得分:0)

您可以将$ data参数设为可选

class Hotel {
    function add( Model_Hotel $hotel, Validate $data = null );
}