Когда в PHP был введен код операции STRLEN? - PullRequest
0 голосов
/ 25 апреля 2019

Я был удивлен, проверяя коды операций, сгенерированные 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 Ответ

5 голосов
/ 25 апреля 2019

Код операции 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
...