runkit_method_redefine

(PECL runkit >= 0.7.0)

runkit_method_redefineИзменяет код выбранного метода

Описание

runkit_method_redefine ( string $classname , string $methodname , string $args , string $code [, int $flags = RUNKIT_ACC_PUBLIC [, string $doc_comment = NULL ]] ) : bool
runkit_method_redefine ( string $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 "До: " $e->foo();

// переназначаем метод 'foo'
runkit_method_redefine(
    
'Example',
    
'foo',
    
'',
    
'return "bar!\n";',
    
RUNKIT_ACC_PUBLIC
);

// вывод Example::foo() (после переназначения)
echo "После: " $e->foo();
?>

Результат выполнения данного примера:

До: foo!
После: bar!

Смотрите также

add a note add a note

User Contributed Notes 1 note

up
3
lauri dot piisang at cashongo dot co dot uk
12 years ago
A sample implementation of redefining a public static method of symfony's sfDate to 'travel in time' with runkit:
<?php
//Going back in time 3 days
$subtractablePeriod = 3;
runkit_method_redefine('sfDateTimeToolkit', 'now', '', 'return strtotime("-'.$subtractablePeriod.' days");', (RUNKIT_ACC_PUBLIC | RUNKIT_ACC_STATIC));   

//Do Stuff here that would otherwise get the current date

//Return to realtime
runkit_method_redefine('sfDateTimeToolkit', 'now', '', 'return time();', (RUNKIT_ACC_PUBLIC | RUNKIT_ACC_STATIC));
?>
To Top