Как отключить определение функции так же, как мы отключили переменную?

Я хочу определить функцию и отключить ее после ее использования так же, как мы делаем с переменными.

$a = 'something'; unset($a); echo $a; // outputs nothing 

Точно так же, если я объявляю функцию callMethod () , есть ли способ ее отменить?

Solutions Collecting From Web of "Как отключить определение функции так же, как мы отключили переменную?"

Начиная с 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;