Note to users: language constructs (eval, die, exit, isset, unset, echo etc.) which might be confused with functions, cannot be renamed or redefined even with runkit.internal_override.
(PECL runkit >= 0.7.0)
runkit_function_redefine — Заменяет определение функции новой реализацией.
$funcname
, string $arglist
, string $code
[, bool $return_by_reference
= NULL
[, string $doc_comment
= NULL
]] ) : bool$funcname
, Closure $closure
[, string $doc_comment
= NULL
] ) : boolЗамечание: По умолчанию, только пользовательские функции могут быть удалены, переименованы или изменены. Для перекрытия внутренних функций, необходимо включить в php.ini опцию
runkit.internal_override
.
funcname
Имя заменяемой функции
arglist
Новый список аргументов, принимаемый функцией
code
Код новой функции
closure
Функция определяющая замыкание (closure).
return_by_reference
Должна ли функция возвращать результат по ссылке.
doc_comment
Документирующий комментарий к функции.
Возвращает TRUE
в случае успешного завершения или FALSE
в случае возникновения ошибки.
Версия | Описание |
---|---|
runkit 1.0.4 |
Добавлен альтернативный синтаксис с использованием замыканий (closure ).
|
runkit 1.0.4 |
Были добавлены необязательные параметры return_by_reference и
doc_comment .
|
Пример #1 Пример runkit_function_redefine()
<?php
function testme() {
echo "Старый код Testme\n";
}
testme();
runkit_function_redefine('testme','','echo "Новый код Testme\n";');
testme();
?>
Результат выполнения данного примера:
Старый код Testme Новый код Testme
Note to users: language constructs (eval, die, exit, isset, unset, echo etc.) which might be confused with functions, cannot be renamed or redefined even with runkit.internal_override.
Here is another example with a parameter:
<?php
function hello_world($word) {
echo "Original Hello World: $word\n</br>";
}
$helloWorld = 'echo "Redefined Hello World: $word\n</br>";';
hello_world('test1');
runkit_function_redefine('hello_world', '$word', $helloWorld);
hello_world('test2');
?>