【发布时间】:2011-04-04 14:00:11
【问题描述】:
类型提示帮助编译器假定变量的类型,但是,由于 PHP 是一种动态脚本解释语言,我想到了一个问题,即类型提示是否有可能使运行时更快?
【问题讨论】:
标签: php performance type-hinting
类型提示帮助编译器假定变量的类型,但是,由于 PHP 是一种动态脚本解释语言,我想到了一个问题,即类型提示是否有可能使运行时更快?
【问题讨论】:
标签: php performance type-hinting
PHP 中的所有类型提示都是添加代码来测试参数的类型,如果它不是预期的则失败,因此类型提示永远不会帮助性能。它唯一真正的用途是调试,所以如果你有一个经常被调用的函数,删除生产代码中的类型提示可以加快速度,特别是因为检查对象的类型并不是世界上最快的事情。
【讨论】:
类型提示只会影响性能,因为它需要(对于对象)测试继承层次结构。更糟糕的是,这种检查在 PHP 中代价高昂,因为它的时间与层次结构的深度成正比。
不过,类型测试,例如为 array 提示所做的测试,开销要小得多。
此外,它目前不用于任何优化目的。
然而,它是一个有用的防御性编程功能。
【讨论】:
PHP 是一种动态语言。
动态语言仅支持运行时检查。
类型提示是运行时类型检查。
运行时类型检查不利于性能。
因此,类型提示不利于性能。
【讨论】:
我做了一个基准测试
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();
}
类型提示比没有类型提示慢 10% 左右。 它不会很慢,除非在代码的重要部分(例如一个巨大的循环)中需要它,或者我们需要原始性能。
我更喜欢PHPdoc,它的工作原理类似,更完整,不影响性能。
【讨论】: