PHP 中何时引入了 STRLEN 操作码?
When was the STRLEN opcode introduced in PHP?
我在检查由 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版本中引入的?我在任何地方都找不到这个信息。
在 PHP 7.0 中添加了 STRLEN 操作码。 Here's the commit that introduced it.
还有许多其他函数具有专用操作码;目前,这些函数是:
- 某些类型检查函数(
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
我在检查由 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版本中引入的?我在任何地方都找不到这个信息。
在 PHP 7.0 中添加了 STRLEN 操作码。 Here's the commit that introduced it.
还有许多其他函数具有专用操作码;目前,这些函数是:
- 某些类型检查函数(
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