繁体   English   中英

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

[英]Do type declarations and type annotations obsolete or complement each other?

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

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

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

public function () : SomeClass { ... }

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

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

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

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

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

注意 :

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

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM