【问题标题】:How can I make PHP7 parser to force return types?如何使 PHP7 解析器强制返回类型?
【发布时间】:2018-10-21 11:54:45
【问题描述】:

在最近的 PHP 中是否有任何指令(可能类似于 declare( strict_types = 1 ); 的指令)告诉 PHP 解释器“强制”函数中的返回类型,如果没有返回类型,则由于 parse/语法错误?

我希望在代码中包含这个:

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

是允许的,但这个:

public function add( int $a, int $b )
{
    return $a + $b;
}

被解释器禁止,导致解析错误,因此即使函数没有被调用,脚本也永远不会被执行。

我的意思是:

我并不是想“在某个函数中强制返回类型”(我已经这样做了)。我想要的是配置“强制我在文件或项目的所有函数中强制返回类型”。

【问题讨论】:

  • 据我所知,目前(PHP 7.2)没有办法强制返回类型声明。
  • 好的 Łukasz,谢谢!看看是否在 7.3 中。
  • 我会指出问题中的示例代码是无效的 PHP,因为您的变量没有 $ 符号。 :-)
  • 哦,是的!已更正,谢谢!

标签: php php-7 return-type php-7.1 php-7.2


【解决方案1】:

我查看了PHP RFC: Return Type Declarations,没有办法(现在和将来的版本)做这样的事情......

declare(strict_types=1) (PHP RFC: Scalar Type Declarations) 也一样,它只确保现有声明经过严格类型检查。

【讨论】:

    【解决方案2】:

    对您的问题的简短回答是否定的。PHP 没有任何东西可以强制您定义返回类型。它也没有任何东西强迫你为你的参数定义类型——strict_types = 1 强制传递的值是该方法的正确类型,如果类型已定义,但你仍然可以编写带有不的参数的方法'不定义类型。

    PHP 可能会在未来的版本中按照您的要求进行更改,但目前还没有任何版本的卡片。

    同时,我建议使用代码检查工具来帮助您在代码中强制执行此类细节。像 PHP Code Sniffer 这样的工具将是一个好的开始。您可以将其添加到您的 IDE,以便在您的代码不符合您定义的标准时实时收到警告,并且您可以将其添加到您的工作流中,这样它可以防止代码在失败时提交和/或部署测试。

    【讨论】:

      【解决方案3】:

      究竟您的问题是什么?没有强制的固定返回类型?我喜欢用 PHP 编码的懒惰方式。在大型项目中,我可能会很麻烦地找到我承认的输入错误的变量名或输入错误的返回值。但有补救措施。

      如果调用者需要一个确定的类型,它无论如何都可以(必须!)测试它。这可以通过将结果转换为请求的类型并在失败时抛出异常来完成,如PHP String-to-Integer Exception 所示。或者如果是整数,只需使用 is_numericis_nanis_real 等。您可以将这些测试放在基中每种类型的成员函数中对象,甚至使用具有这些成员函数等的全局单例测试器对象。

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-23
      • 1970-01-01
      • 2016-02-10
      • 2013-01-20
      • 1970-01-01
      • 2016-05-30
      相关资源
      最近更新 更多