函数参数前的PHP类型声明好还是不好?

13

为函数参数提供类型有什么优势吗?

public static function DoStuff( string $str ) {
    echo $str;
}

相对于不使用它们,有何区别?

public static function DoStuff( $str ) {
    echo $str;
}

如果我声明我的类型,它可能会更快吗?


2
为什么不进行基准测试并查看呢? - Marc B
4个回答

23

目前的PHP版本不支持指定标量类型,比如string或int。你只能指定类/接口或数组。

相关手册页面:Type Hinting


我认为使用类型提示至少有一个好处:可读性更好。函数/方法需要什么参数更容易看出来。

一些人会认为这是一个缺点,即如果您不遵守类型提示并传递一些不符合类型的参数,您将得到一个可捕获的致命错误。然而:

  • 我个人认为它迫使开发者更加尊重您的接口
  • 它允许您的代码只使用接收到的参数。
  • 生成的错误可以被捕获


如果你的问题是关于速度的:

  • 使用或不使用类型提示不应该是考虑性能的结果。您应该使用或不使用此功能。
  • 即使有一些性能影响,它应该非常小。我想说,在考虑这个问题之前,有很多部分的代码需要优化。


总之,个人意见:我经常使用这些类型提示,因为:

  • 使用我的代码的人知道他们需要传递什么 (他们并不总是读文档...)
  • 如果他们没有做到符合预期,它会以一种他们立刻注意到的方式失败;
  • 我的代码不必检查接收到的参数是否是正确的类型:我知道它是正确的,因为PHP强制执行。

2
此答案已过时,请参阅http://php.net/manual/en/functions.arguments.php#functions.arguments.type-declaration。 - phil294
1
现在称之为“类型声明”,而不是“类型提示”。否则,答案对我来说仍然非常相关。 - WhiteHotLoveTiger
请在参考本文时注明PHP的版本,因为如上所述,本答案已不适用于当前版本的PHP。 - dctucker

6

一般来说,类型检查/类型提示是有益的,因为它为编译器/解释器提供了必要的信息以进行更好的错误检查。当你没有类型提示时,你的程序可能会在不生成描述性错误的情况下静默崩溃。


1

优点是,如果有人试图不正确地使用您的函数(例如使用一个类而不是另一个类,或者在应该使用数组时没有使用数组),则会立即出现错误。

但是,除了对象或数组之外,您无法做到这一点 - 因此,您使用字符串的示例将无法工作。

随着更多的检查发生,它几乎肯定会运行得更慢。


1

PHP对我来说有三个优点:

  1. 代码变得更加自我描述
  2. 在需要严格验证(如数字或非设置值检查)时非常有用。
  3. 通过显示非终端php错误,限制变量使用,告诉您正在使用错误的变量值。

我不确定使用类型是否会提高性能。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接