PHP

2022 年的 PHP–激动人心的时代即将到来,让我们来看看现代的 PHP

这是我第四次每年写一篇“PHP in 20XX”的帖子,我必须承认我从来没有像今年这样兴奋过:我们已经看到 PHP 添加了一些很棒的新特性,比如注解,枚举、属性提升和纤程;最重要的是,静态分析社区正在取得巨大进步,我个人最喜欢的功能是 PhpStorm 现在在编写代码时支持泛型。

激动人心的时代即将到来,让我们来看看现代 PHP!…

    

Symfony 6: PHP 8 Native Types & 为什么我们需要你

Symfony 2.0 以来,Symfony 的最大变化即将到来,这是一个非常激动人心的时刻:Symfony 6 在其所有可能的方法上都具有原生 PHP 类型。这将极大地推动 PHP 开源社区中的类型安全!Nicolas和 Alexander已经断断续续地工作了 2 年,以创造可能的最佳升级体验。
现在,距离稳定版发布还有 2.5 个月,是大放异彩的时候了!特别是如果您维护任何开源项目(甚至没有直接链接到 Symfony),我们很乐意听取您的意见,以确保升级不会非常困难。

        

移除无用的Composer加载文件,以提升性能。

一些PHP项目通过Composer安装了一些组件 ,其中有一些是针对特定PHP版本或PHP扩展的polyfill,如果我们的PHP版本满足安求,相关的PHP扩展也已安装好 。那么就不需要安装这些polyfill了。

我们可以通过移除这些polyfill,以减少自动加载的文件数量,达到优化性能的目的。

示例:

请在项目的composer.json中加入如下以下内容:即可移除对应的无用组件,减少加载时间。

"replace": {
"symfony/polyfill-apcu": "*",
"symfony/polyfill-php80": "*",
"symfony/polyfill-mbstring": "*",
"symfony/polyfill-ctype": "*",
"symfony/polyfill-php73": "*",
"symfony/polyfill-php72": "*",
"symfony/polyfill-php81": "*"
},

                

Zend Engine中的函数内联-使用完全限定函数名称提高PHP程序性能

Zend Engine中的函数内联

 Zend Engine(PHP)特殊功能内联

现代PHP很快!它具有多项性能功能,例如OPCache,JIT和其他编译阶段的改进,可针对许多PHP应用程序进行智能优化。

检查OPCode是确保PHP可以进行最佳优化的简便方法。使用列出的OPCode,可以更清楚地了解给定的PHP代码段是否采用了执行预期任务所需的最短数量的OPCode。

目前,PHP有30多个这样的函数,它们使用特殊的OPCode或内联以提高性能。


展示这种效果的一个例子是 strlen函数。它返回给定字符串的长度,PHP尝试抢先优化。

if (strlen('Test') < 2) {
    echo "Test";
}

在此代码段中,该strlen函数在静态字符串文字上调用,并且PHP可以完全消除此块,因为Test字符串的长度是固定的,并且比较值也是静态值。

使用OPCode dump可以更好地揭示这一点

优化之前

php 
        

PHP的可调用类型(callable)总结

// 1 普通函数
call_user_func('my_function');
// 2类的静态方法
call_user_func(['MyClass', 'myCallbackMethod']);
// 3对象方法
call_user_func([new MyClass(), 'myCallbackMethod']);
//4类的静态方法(2)
call_user_func('MyClass::myCallbackMethod');
//5匿名函数
call_user_func(function(){echo '匿名函数';});
//6箭头函数
call_user_func(fn() =>print('箭头函数'));
 
//7相对关系
call_user_func(array('B', 'parent::who'));
// 8: Objects implementing __invoke can be used as callables
class C {
public function __invoke($name)