(PECL runkit >= 0.7.0)
runkit_method_redefine — Изменяет код выбранного метода
$classname
, string $methodname
, string $args
, string $code
[, int $flags
= RUNKIT_ACC_PUBLIC
[, string $doc_comment
= NULL
]] ) : bool$classname
, string $methodname
, Closure $closure
[, int $flags
= RUNKIT_ACC_PUBLIC
[, string $doc_comment
= NULL
]] ) : boolЗамечание: Эта функция не может быть использована для влияния на работающие в данный момент (или цепные) методы.
classname
Имя класса, в котором заменяется метод
methodname
Имя заменяемого метода
args
Список параметров, принимаемых методом через запятую
code
Новый код метода, который выполнится при вызове
methodname
closure
Функция определяющая замыкание (closure).
flags
Переназначаемый метод может быть
RUNKIT_ACC_PUBLIC
,
RUNKIT_ACC_PROTECTED
или
RUNKIT_ACC_PRIVATE
опционально в комбинации через побитовое ИЛИ с
RUNKIT_ACC_STATIC
(начиная с версии 1.0.1)
doc_comment
Документирующий комментарий к функции.
Возвращает TRUE
в случае успешного завершения или FALSE
в случае возникновения ошибки.
Версия | Описание |
---|---|
runkit 1.0.4 |
Добавлен альтернативный синтаксис с использованием замыканий (closure ).
|
runkit 1.0.4 |
Был добавлен необязательный параметр doc_comment .
|
Пример #1 Пример для runkit_method_redefine()
<?php
class Example {
function foo() {
return "foo!\n";
}
}
// создаем экзепаляр Example
$e = new Example();
// вывод Example::foo() (до переназначения)
echo "Before: " . $e->foo();
// переназначаем метод 'foo'
runkit_method_redefine(
'Example',
'foo',
'',
'return "bar!\n";',
RUNKIT_ACC_PUBLIC
);
// вывод Example::foo() (после переназначения)
echo "After: " . $e->foo();
?>
Результат выполнения данного примера:
Before: foo! After: bar!