2017-08-17 109 views
1

可能是我做了一些可怕的错误,但还是找不到方法。任何人都可以为此提供解决方案吗?内部接口方法返回类型

我有一个接口 -

interface L_Item_Action{ 

    function get_title(); 

    function get_price(); 

    function valid($data); 

    function get_error_messages(); 
} 

在这个界面我想要的功能valid()只返回布尔值。

它不是所提及的那个的重复,因为它根本不处理接口。 我试过boolean function valid($data);但这不起作用。 有什么办法吗?

试图清除混乱

这个事情的作品 -

function sum($a, $b): int { 
    return $a + $b; 
} 

bcoz这里我定义的功能。 虽然将其定义为抽象方法或接口方法,但它不起作用。

function sum($a, $b): int; 
int function sum($a, $b); 

以上两种情况都是不可能的。

+4

的可能的复制[是否有可能编写严格定义的PHP代码?](https://stackoverflow.com/questions/1512293/is-it-possible-写严格类型的PHP代码) – Carcigenicate

+0

[阅读此]。(http://php.net/manual/en/functions.returning-values.php#functions.returning-values.type-declaration)你可能需要使用严格模式才能像预期的那样使用布尔运算符。 –

+0

不,这不是重复的,它根本不在接口中 – Alice

回答

1

更新,因为评论。

如果你使用PHP 7(你din't说),你必须使用它严格declare(strict_types=1);和使用function valid($data): bool{};

更新2,因为评论

的OP发布她的问题的代码extacly like it is on the documentation for strict types,但是该文档也说,这是PHP 7只,因此混乱

PHP7-strict-return-types

在PHP 5中,你将不得不建立某种形式的观察员共轭亚油酸ss通过注释和反射来检查你的返回类型。但是这可能会严重影响代码/应用程序。在PHP5中更好的方法是做单元测试,以确保代码仍然以正确的方式使用。

然而,如果你试图强迫别人使用你的代码,只需添加一个声明;)

+0

谢谢你的回复,我也试过用抽象类也是,但问题是 - 返回类型不工作写入函数签名像'布尔函数有效($ data);'....我在那里定义函数(里面的类),强制类型工作 – Alice

+0

你说得对,如果你只接受我说的一半的话,它是行不通的 – DarkMukke

+0

Ohh,现在我读了关于declare(strict_types = 1)的信息;这是很酷的信息,我打算为此赞成你 我明白了为什么它不工作....但不幸的是我使用的是PHP 5 .... 。我将升级我的服务器,然后再试一次.....再次感谢 – Alice

0

您在声明一个接口声明它在一个类的方法相同的返回类型。

boolean function valid($data); 

不起作用,因为返回类型声明位于错误的地方。该代码甚至不会解析。正确的语法是:

function valid($data): boolean; 

See the PHP documentation for more information and examples.

+0

,事实证明,OP使用的是php 5 (请参阅评论),您的答案依赖于PHP 7 – DarkMukke

+1

有关方法返回类型的任何答案都依赖于PHP 7. OP使用无效的语法来声明返回类型,所以即使它们具有正确的PHP版本,它也不会起作用。 –

+0

安静的权利,你是 – DarkMukke