类型提示是不是有助于 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 脚本的性能?的主要内容,如果未能解决你的问题,请参考以下文章

PHP运行原理和机制

PHP常量

PHP clearstatcache() 函数

编写SHELL脚本--判断用户的参数

ssh执行远程服务器脚本 提示php: command not found

在 php 脚本上设置 UTF-8 会产生 HTML 源代码,而不是呈现的内容 [重复]