类型提示是不是有助于 PHP 脚本的性能?
Posted
技术标签:
【中文标题】类型提示是不是有助于 PHP 脚本的性能?【英文标题】:Is type hinting helping the performance of PHP scripts?类型提示是否有助于 PHP 脚本的性能? 【发布时间】:2011-04-04 14:00:11 【问题描述】:类型提示帮助编译器假定变量的类型,但是,由于 php 是一种动态脚本解释语言,我想到了一个问题,即类型提示是否有可能使运行时更快?
【问题讨论】:
【参考方案1】:PHP 中的所有类型提示都是添加代码来测试参数的类型,如果它不是预期的则失败,因此类型提示永远不会帮助性能。它唯一真正的用途是调试,所以如果你有一个经常被调用的函数,删除生产代码中的类型提示可以加快速度,特别是因为检查对象的类型并不是世界上最快的事情。
另见when should I use type hinting in PHP?
【讨论】:
准确,除了“它唯一真正的用途是用于调试”。类型提示为您的代码引入了一定程度的安全性。 第二个链接失效【参考方案2】:类型提示只会影响性能,因为它需要(对于对象)测试继承层次结构。更糟糕的是,这种检查在 PHP 中代价高昂,因为它的时间与层次结构的深度成正比。
不过,类型测试,例如为 array
提示所做的测试,开销要小得多。
此外,它目前不用于任何优化目的。
然而,它是一个有用的防御性编程功能。
【讨论】:
【参考方案3】:PHP 是一种动态语言。 动态语言仅支持运行时检查。 类型提示是运行时类型检查。 运行时类型检查不利于性能。 因此,类型提示不利于性能。
【讨论】:
+1 - 我喜欢这个,它几乎就像一个类型提示(或其他东西)的禅宗:) 运行 Zend Optimizer 或类似的缓存操作码怎么样? ff 9 的类型推断是什么,它如何帮助提高性能? extremetech.com/computing/… @Ming-Tang 是否有任何基准支持您的答案? 它确实会影响性能,但在大多数实际应用程序中这种影响可以忽略不计。好处(更安全的代码)超过了成本。请注意,未来版本的 PHP 可能会附带 JIT compiler,它可能会利用类型提示来编译为更优化、因此更快的代码。【参考方案4】:我做了一个基准测试
https://github.com/EFTEC/php-benchmarks#type-hinting(可以查看整个代码,自己测试一下)。
/**
* @param DummyClass $arg1
* @param DummyClass $arg2
*
* @return DummyClass
*/
function php5($arg1,$arg2)
return new DummyClass();
function php7(DummyClass $arg1,DummyClass $arg2): DummyClass
return new DummyClass();
php5 0.0006339550018310547 秒
php7 0.0007991790771484375 秒
类型提示比没有类型提示慢 10% 左右。 它不会很慢,除非在代码的重要部分(例如一个巨大的循环)中需要它,或者我们需要原始性能。
我更喜欢PHPdoc,它的工作原理类似,更完整,不影响性能。
【讨论】:
以上是关于类型提示是不是有助于 PHP 脚本的性能?的主要内容,如果未能解决你的问题,请参考以下文章