2013-10-25 67 views
2

我在构建一个Laravel 4应用程序时遇到了一个非常奇怪的问题,虽然这个问题比Laravel更适合PHP: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

是否当您从该接口和实现它的类中删除类型提示('Venue')就抱怨吗? –

+1

它没有,但是我只是意识到接口正在使用一个命名空间,所以我需要在Venue之前添加一个反斜杠以匹配它。哎呀! – SixteenStudio

回答

10

似乎秒发布我的大脑接通的问题后:

这是事实,我在界面中使用了命名空间,所以(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); 

解决的问题。在任何情况下,在同样的错误,这保持了别人绊倒,避免头痛

+0

我会说完全一样的东西。当我开发一个软件包时,我有一个看起来很像它的问题。 –

+1

哦,我以为我疯了 - 即使声明是a)世俗和b)完全一样,也有同样的错误。但是我错过了一个“使用[namespace]作为[别名]”的声明。感谢您使用解决方案更新您的问题:)! – Chris

+0

没问题!其中一件事,一旦你知道它,你会继续穿过它,但实际上知道的解决方案,不浪费时间寻找一个:)在我差不多一年后仍然发生! – SixteenStudio