【问题标题】:Method return type inside Interface接口内的方法返回类型
【发布时间】:2017-08-17 13:36:58
【问题描述】:

可能是我做错了什么可怕的事情,但仍然找不到方法。任何人都可以解决这个问题吗?

我有一个界面-

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); 

以上两个都不可能。

【问题讨论】:

  • Read this. 您可能需要使用严格模式才能按预期使用布尔值。
  • 不,这不是重复的,它根本不在接口内
  • 您甚至没有尝试检查文档的有效语法...
  • 我正在搜索那些文档,无论我得到什么,都在阅读,但仍然没有解决方案。我会继续努力……但最终时间不多了:(

标签: php interface php-5.6


【解决方案1】:

更新,因为 cmets。

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

更新 2,因为 cmets

OP 发布了她的问题代码 extacly like it is on the documentation for strict types,但是该文档还说它仅是 PHP 7,因此造成混淆

在 PHP 5 中,您必须创建某种观察者类,通过注释和反射检查您的返回类型。但这可能对代码/应用程序造成很大影响。 PHP5 中更好的方法是进行单元测试,以确保代码仍然以正确的方式使用。

如果您试图强迫其他人使用您的代码,只需添加免责声明;)

【讨论】:

  • 感谢您的回复,我也尝试过使用抽象类,但问题是 - 返回类型无法像 boolean function valid( $data ); 这样编写函数签名 .... 我在哪里定义那里的函数(内部类),强制类型工作
  • 你是对的,如果你只接受我说的一半是行不通的。
  • 哦,现在我读到了 declare(strict_types=1);这是很酷的信息,我会为此投票给你。我知道它为什么不工作的确切原因......但不幸的是我使用的是 php 5......我将升级我的服务器并尝试......再次感谢
  • 在 PHP 5 中无法完成,您直接从文档中复制的问题代码说它仅限 PHP 7
【解决方案2】:

在接口中声明返回类型与在类中声明返回类型相同。

boolean function valid( $data );

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

function valid( $data ): boolean;

See the PHP documentation for more information and examples.

【讨论】:

  • 事实证明,OP 使用的是 php 5(请参阅 cmets),您的答案依赖于 PHP 7
  • 关于方法返回类型的任何答案都依赖于 PHP 7。OP 使用了无效的语法来声明返回类型,因此即使它们具有正确的 PHP 版本也不会起作用。跨度>
猜你喜欢
  • 2017-05-09
  • 2011-05-16
  • 1970-01-01
  • 1970-01-01
  • 2018-02-23
  • 1970-01-01
  • 1970-01-01
  • 2016-03-15
  • 1970-01-01
相关资源
最近更新 更多