Я хочу определить функцию и отключить ее после ее использования так же, как мы делаем с переменными.
$a = 'something'; unset($a); echo $a; // outputs nothing
Точно так же, если я объявляю функцию callMethod () , есть ли способ ее отменить?
Начиная с PHP 5.3, вы можете назначить анонимную функцию переменной, а затем отключить ее:
$upper = function($str) { return strtoupper($str); }; echo $upper('test1'); // outputs: TEST1 unset($upper); echo $upper('test2'); // Notice: Undefined variable: upper // Fatal error: Function name must be a string
с$upper = function($str) { return strtoupper($str); }; echo $upper('test1'); // outputs: TEST1 unset($upper); echo $upper('test2'); // Notice: Undefined variable: upper // Fatal error: Function name must be a string
До 5.3 вы можете сделать что-то подобное с create_function()
$func = create_function('$arg', 'return strtoupper($arg);'); echo $func('test1'); unset($func); $func2 = "\0lambda_1"; echo $func2('test2.a'), "\n"; // Same results, this is the "unset" $func function echo $func('test2.b'); // Fatal Error
с$func = create_function('$arg', 'return strtoupper($arg);'); echo $func('test1'); unset($func); $func2 = "\0lambda_1"; echo $func2('test2.a'), "\n"; // Same results, this is the "unset" $func function echo $func('test2.b'); // Fatal Error
runkit_function_remove – Удалить определение функции http://php.net/manual/en/function.runkit-function-remove.php
Для сомневающихся, имеет смысл хотеть удалить функцию. Если у вас есть функция, которая использует много данных только один раз в начале вашего скрипта, то желание удалить его имеет смысл.
Одним из таких типов функций может быть функция обнаружения мобильных / планшетов для скрипта или фреймворка. Он нужен только один раз, и он, вероятно, займет значительную часть памяти для функции, которая выполняется только один раз. Если у вас есть какие-либо сомнения, проверьте https://github.com/serbanghita/Mobile-Detect/blob/master/Mobile_Detect.json
Это говорит о том, что существует проблема вокруг проблемы без необходимости удаления функции. Для чего это необходимо, сделайте глобальным все массивы, используемые функцией, а затем в конце функции их все отключите. Функция остается, но объемные данные идут. Обратите внимание, что когда вы отключаете переменную, сборщик мусора PHP может решить, когда будет освобождена память. И освобождение памяти занимает процессорные циклы от вашего приложения. Я действительно не вижу никакого PHP-скрипта, который потребует отключения функции.
Из этого вопроса :
Вы можете использовать rename_function
<?php rename_function('original_name', 'new_name' ); ?>
а затем обновить исходную функцию.
override_function также может работать.
Они являются частью Zend PHP Debugger, если это не работает, вы всегда можете попробовать что-то вроде:
function function1(){ echo "1"; } function function2(){ echo "2"; } $i = "function2"; $i(); // displays 2;