Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 方法声明必须与接口方法声明兼容-当方法签名完全相同时?_Php_Interface_Laravel_Laravel 4 - Fatal编程技术网

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

Php 方法声明必须与接口方法声明兼容-当方法签名完全相同时?,php,interface,laravel,laravel-4,Php,Interface,Laravel,Laravel 4,在我正在构建的Laravel 4应用程序中,我遇到了一个非常奇怪的问题,尽管这个问题更多地涉及PHP而不是Laravel:PHP抱怨说,当接口和类方法具有完全相同的签名时,这些方法是不兼容的 仅当使用了不正确的类型提示,或者参数数量不一致时,它才应该抱怨,但出于某种原因,当一切都做对了时,这就是抱怨。我看不到其他有这个问题的人,有人能看到我没有看到的东西吗 界面: <?php namespace Repository; interface TillRepositoryInterface

在我正在构建的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)
    {

    }
}

似乎是在发布问题几秒钟后,我的大脑启动了:

事实上,我在界面中使用了名称空间,因此
(场馆$venture)
实际上是
(存储库\场馆$venture)
。只需改变这一点:

public static function allInVenue(Venue $venue);

public static function findByIdInVenue(Venue $venue);
对此

public static function allInVenue(\Venue $venue);

public static function findByIdInVenue(\Venue $venue);

解决了这个问题。保持这种状态,以防其他人遇到同样的错误,以避免头痛

当您从接口和实现它的类中删除类型提示(
vention
)时,它会抱怨吗,然而,我刚刚意识到接口使用的是一个名称空间,所以我需要在匹配前添加一个反斜杠。哎呀!我会说完全一样的话。当我开发一个软件包的时候,我遇到了一个看起来很像的问题。哦,天哪,我以为我疯了——犯了同样的错误,尽管声明a)平凡,b)完全相同。但我缺少了一个“将[namespace]用作[alias]”声明。感谢您使用解决方案更新您的问题:)!没问题!其中一件事,一旦你知道了,你会不断地遇到它,但实际上知道解决办法,不浪费时间寻找一个:)仍然发生在我几乎一年后!