Вызов compact () из расширения php в C ++ - PullRequest
0 голосов
/ 11 сентября 2018

Вот мой код:

  zval compact, compact_params[1], compact_result;
      zval A;
      ZVAL_STRING(&A, "test");
      ZVAL_STRING(&compact, "compact");
      ZVAL_STRING(&compact_params[0], "A");
      call_user_function(EG(function_table), NULL, &compact, &compact_result, 1, compact_params);

когда я звоню с php, он говорит:

Невозможно динамически вызвать compact ()

Теперь я не имею ни малейшего представления о том, как вызвать compact () из c ++. Я уже успешно вызывал другую функцию, но этот компакт отличается.

1 Ответ

0 голосов
/ 13 сентября 2018

Похоже, в PHP 7 добавлена ​​динамическая защита вызовов для определенных функций.Смотрите этот файл модульного теста из исходного репозитория PHP.Я не уверен, какова цель этого.Ваш код работает в PHP 5, хотя;Я проверил это.

В качестве обходного пути вы можете взглянуть на реализацию функции compact и использовать ее основные служебные функции для достижения того же.Посмотрите на реализацию php_compact_var().Поскольку эта функция статически связана, вам придется скопировать код в ваше расширение.

...