何时在PHP中引入STRLEN操作码?

Ben*_*min 0 php opcode language-history

在检查由PHP脚本生成的操作码时,我感到很惊讶,与其他字符串函数(例如)不同str_pad(),strlen()它不是像以前那样的函数调用(如果我没记错的话),但是有专用的STRLEN操作码:

strlen($c);
str_pad($c, 2);
Run Code Online (Sandbox Code Playgroud)
...

   8     4        STRLEN                                           ~7      !2

...

   9     6        INIT_FCALL                                               'str_pad'
         7        SEND_VAR                                                 !2
         8        SEND_VAL                                                 2
         9        DO_ICALL                                                 
Run Code Online (Sandbox Code Playgroud)

https://3v4l.org/9QJQ7/vld#output

此操作码是在哪个PHP版本中引入的?我在任何地方都找不到此信息。

dus*_*uff 5

STRLEN操作码是在PHP 7.0中添加的。这是引入它的提交。

还有许多其他具有专用操作码的功能。当前,这些功能是:

  • 某些类型检查的函数(is_null,is_bool,is_long,is_int,is_integer,is_float,is_double,is_real,is_string,is_array,is_object,is_resource)
  • 某些类型铸造函数(intval,floatval,doubleval,strval)
  • defined
  • chr 和 ord
  • call_user_func 和 call_user_func_array
  • in_array
  • count(又名sizeof)
  • get_class
  • get_called_class
  • gettype
  • func_get_args 和 func_num_args
  • array_slice
  • array_key_exists