类型声明和类型注释是否过时或相互补充?

时间:2016-12-01 11:45:55

标签: php php-7 return-type docblocks type-declaration

我总是使用注释来声明返回类型。例如:

/**
 * @return SomeClass
 */
public function () { ... }

但现在我看到了另一种方式:

public function () : SomeClass { ... }

问题

我应该在这些之间做出选择,使用两者,还是他们有一些我应该注意的根本区别?

3 个答案:

答案 0 :(得分:2)

注释与返回类型无关。如果您要返回其他内容,它不会抛出任何错误或警告。虽然它对文档有帮助。

除此之外,另一种方法是php7 Return Type Declarations,它支持所有与参数相同的类型。要指定返回类型,我们在开始大括号之前添加冒号,然后添加类型。

严格键入也会对返回类型声明产生影响。在默认的弱模式下,如果返回的值不是那种类型,则它们将被强制转换为正确的类型。在强模式下,返回的值必须是正确的类型,否则将抛出TypeError。

添加返回类型可以确保函数返回预期的内容,并且可以很容易地预先看到函数的工作方式。

注意:

  

覆盖父方法时,子方法必须匹配任何方法   父类的返回类型声明。如果父母没有定义   返回类型,那么子方法可以这样做。

答案 1 :(得分:2)

据我所知,你应该尽可能使用两者。

在PHP中添加return type of function(可能来自PHP 7)对于确保执行期间的类型很有用。请注意,PHP 7允许支持函数中的参数类型。

在函数上方添加注释对于生成文档很有用。示例PHPDocumentor使用注释,例如@return

答案 2 :(得分:2)

这些之间有一定程度的重叠。

与类型注释不同,类型声明是语言本身的一部分,并由语言运行时强制执行。如果使用类型声明来指定函数接受(或返回)int,并且传入(或返回)数组,则会出现错误。如果你传入一个浮点数,PHP将尝试为你转换它,如果可能的话,然后错误(弱模式),或总是抛出一个错误(严格模式)。类型声明也会在继承和实现接口时进行检查,从而防止在实现中使用错误的类型。另一方面,注释仅仅是注释,并不是由运行时强制执行的。因为强制执行了类型声明,所以理想情况下总是尽可能使用它们。

由于类型注释和类型声明都可以作为参数或返回类型的文档,因此如果您有类型声明,则注释是多余的。但请记住,您是否正在使用尚未识别类型声明的工具(如IDE或文档生成器),并且需要您保留注释。您还应该考虑在文档的注释中提供参数或返回值的描述,您可以对类型声明进行操作,有时也可以指定更精确的类型。注释(例如int[]注释与array声明,或由您重写的方法返回的类的子类)。但是,如果这些都不适用,并且您的注释不提供比函数签名(function foobar(int $foo, string $bar): Qux行)更多的信息,则注释会浪费空间。

因此,总结:始终使用类型声明。至于注释,如果需要(工具)或者提供其他信息,请使用它们。