首页 > 大家使用php7的新语法了没有?

大家使用php7的新语法了没有?

如 Scalar type hints 这种语法,声明函数的参数类型与返回值类型的?

function foo(int $a , $int b): int {
    return $a + $b;
}

另外使用这种写法和原来不指定类型,对于性能有何影响?有提升吗?


强类型strict_types是从PHP7开始才引入的东西,默认不开启,以后也不会默认开启,是一个很有争议性且完全不兼容PHP5的特性.
这个强类型跟性能没有任何关系,其中PHP之父Rasmus,Zend公司创始人Andi,PHP7性能方面的核心开发者Dmitry和鸟哥Laruence都投了反对票.
https://wiki.php.net/rfc/scalar_type_hints_v5
经过相当激烈的讨论后,PHP7决定引入强类型(strict types)支持.
strict_types=1无非就是约束了参数和返回值的类型,
类型对不上则返回一个Fatal error: Uncaught TypeError
而且是运行时才能感知,php -l file.php语法检查并不会提示类型错误.

<?php
declare(strict_types=1);
function foo(int $num): int {
    return $num/2;
}
foo(1); //返回值类型错误
foo(1.5); //参数类型错误
foo(2); //正常 

PHPer仍然可以用弱类型编写代码,弱类型带来的开发便捷这个优势PHP是绝不会放弃的,强类型只是多了一种选择,不喜欢,无视就好.


强类型的引入主要是正对JIT编译的,通过强类型,可以很好地优化JIT编译后程序的效率。
不过由于PHP7总体上仍然是非强类型的,鸟哥等PHP7开发参与人员在测试采用JIT技术的效果后,还是决定没有在PHP7中采用JIT技术(原因就是由于非强类型的类型推断增大的编译后程序的体积,减少了CPU命中率,反而在总体耗时上没有大幅提升)。
虽然JIT没有加入,但强类型的语法已经加入到PHP7,虽然目前来说对性能的影响还不是很大,但相信再不久的将来,随着JIT的引入,其效果会越来越明显。

【热门文章】
【热门文章】