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

时间:2019-04-25 17:29:39

标签: php opcode language-history

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

strlen($c);
str_pad($c, 2);
...

   8     4        STRLEN                                           ~7      !2

...

   9     6        INIT_FCALL                                               'str_pad'
         7        SEND_VAR                                                 !2
         8        SEND_VAL                                                 2
         9        DO_ICALL                                                 

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

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

1 个答案:

答案 0 :(得分:5)

STRLEN操作码已添加到PHP 7.0中。 Here's the commit that introduced it.

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

  • 某些类型检查功能(/tmp/.cacheis_nullis_boolis_longis_intis_integeris_floatis_doubleis_realis_stringis_arrayis_object
  • 某些类型转换功能(is_resourceintvalfloatvaldoubleval
  • strval
  • definedchr
  • ordcall_user_func
  • call_user_func_array
  • in_array(又名count
  • sizeof
  • get_class
  • get_called_class
  • gettypefunc_get_args
  • func_num_args
  • array_slice