PHP

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)