PHP 8.1.0 Released!

runkit7_method_redefine

(PECL runkit7 >= Unknown)

runkit7_method_redefineДинамически изменяет код заданного метода

Описание

runkit7_method_redefine(
    string $classname,
    string $methodname,
    string $args,
    string $code,
    int $flags = RUNKIT7_ACC_PUBLIC,
    string $doc_comment = null,
    string $return_type = ?,
    bool $is_strict = ?
): bool
runkit7_method_redefine(
    string $classname,
    string $methodname,
    Closure $closure,
    int $flags = RUNKIT7_ACC_PUBLIC,
    string $doc_comment = null,
    string $return_type = ?,
    bool $is_strict = ?
): bool

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

classname

Класс, в котором нужно переопределить метод.

methodname

Имя метода, который нужно переопределить.

args

Разделённый запятыми список аргументов для переопределённого метода.

code

Новый код, который будет выполняться при вызове methodname.

closure

Замыкание (closure), определяющее метод.

flags

Переопределённый метод может быть RUNKIT7_ACC_PUBLIC, RUNKIT7_ACC_PROTECTED или RUNKIT7_ACC_PRIVATE, и, при необходимости, объединён с помощью побитового ИЛИ с RUNKIT7_ACC_STATIC.

doc_comment

Документальный комментарий метода.

return_type

Тип возвращаемого значения метода.

is_strict

Определяет, будет ли метод вести себя так, как если бы он был объявлен в файле с strict_types=1.

Возвращаемые значения

Возвращает true в случае успешного выполнения или false в случае возникновения ошибки.

Примеры

Пример #1 Пример использования runkit7_method_redefine()

<?php
class Example {
    function 
foo() {
        return 
"foo!\n";
    }
}

// создание объекта Example
$e = new Example();

// вывод Example::foo() (до переопределения)
echo "До: " $e->foo();

// Переопределение метода 'foo'
runkit7_method_redefine(
    
'Example',
    
'foo',
    
'',
    
'return "bar!\n";',
    
RUNKIT7_ACC_PUBLIC
);

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

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

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

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

add a note add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top