PHP 7.2.0 Release Candidate 4 Released

runkit_method_redefine

(PECL runkit >= 0.7.0)

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

Описание

bool 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 ]] )

Замечание: Эта функция не может быть использована для влияния на работающие в данный момент (или цепные) методы.

Список параметров

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!

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

add a note add a note

User Contributed Notes 1 note

up
1
lauri dot piisang at cashongo dot co dot uk
5 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