方法声明必须与接口方法的声明兼容 - 当方法签名完全相同时?

时间:2013-10-25 14:27:01

标签: php interface laravel laravel-4

我在我正在构建的Laravel 4应用程序中遇到一个非常奇怪的问题,尽管这个问题更多地涉及PHP而不是Laravel: PHP抱怨这些方法在接口和放大器时都不兼容。类方法具有完全相同的签名

例如,如果使用了不正确的类型提示,或者参数的数量不一致,它应该只会抱怨,但由于某种原因,当一切都正确时,这是抱怨的。我看不到有其他人遇到过这个问题,有人能看到我没看到的任何东西吗?

界面:

<?php
namespace Repository;

interface TillRepositoryInterface {
    public static function allInVenue(Venue $venue);

    public static function findByIdInVenue(Venue $venue);
}

实现接口的存储库类:

<?php

class TillRepository extends BaseRepository implements Repository\TillRepositoryInterface {

    public static function allInVenue(Venue $venue)
    {

    }

    public static function findByIdInVenue(Venue $venue)
    {

    }
}

1 个答案:

答案 0 :(得分:11)

在发布我的大脑开启的问题后几秒钟似乎:

事实上,我在界面中使用了命名空间,因此(Venue $venue)实际上是(Repository\Venue $venue)。简单地改变这个:

public static function allInVenue(Venue $venue);

public static function findByIdInVenue(Venue $venue);

到此

public static function allInVenue(\Venue $venue);

public static function findByIdInVenue(\Venue $venue);

解决了这个问题。保持这种情况以防万一其他人偶然发现同样的错误,以避免头痛