函数参数之前的PHP类型,好还是坏?

tes*_*ter 13 php types

为参数提供类型是否有任何好处:

public static function DoStuff( string $str ) {
    echo $str;
}
Run Code Online (Sandbox Code Playgroud)

与不使用它们相比?

public static function DoStuff( $str ) {
    echo $str;
}
Run Code Online (Sandbox Code Playgroud)

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

Pas*_*TIN 23

您不能(使用当前版本的PHP)指定标量类型,例如string或int.您只能指定类/接口或数组.

手册的相关页面:类型提示.


我看到使用类型提示至少有一个很大的优势:可读性.更容易看出函数/方法期望的参数类型.

有些人会认为这是一个缺点,如果你不尊重类型提示并传递一些非类型有效的参数,你将得到一个可捕获的致命错误.然而,

  • 我个人认为这会迫使开发人员更多地尊重您的界面
  • 它允许您的代码只使用接收的参数.
  • 生成的错误是可捕获的


如果您的问题与速度有关:

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


总之,个人观点:我经常使用这些类型的提示,就这样:

  • 使用我的代码的人知道他们希望传递的内容(他们并不总是阅读文档...)
  • 如果他们不按预期行事,那就失败了; 硬; 在某种程度上,他们立即注意到
  • 我的代码不必检查接收的参数是否是正确的类型:我知道它是,因为PHP对我强制执行.

  • 这个答案已经过时,请参阅http://php.net/manual/en/functions.arguments.php#functions.arguments.type-declaration (2认同)

ckr*_*use 6

通常,类型检查/类型提示是一件好事,因为它为编译器/解释器提供了必要的信息以进行更好的错误检查.如果不键入提示,程序可能会以静默方式崩溃,而不会生成描述性错误.