runkit_method_redefine

(No version information available, might only be in Git)

runkit_method_redefineCambiar dinámicamente el código del método dado

Descripción

runkit_method_redefine(
    string $classname,
    string $methodname,
    string $args,
    string $code,
    int $flags = RUNKIT_ACC_PUBLIC
): bool

Nota: Esta función no puede ser utilizada para manipular el actual método en ejecución (o extendido).

Parámetros

classname

La clase en la que se va a redefinir el método

methodname

El nombre del método a redefinir

args

Lista de argumentos delimitados por coma para el método redefinido

code

El nuevo código a ser evaluado cuando methodname sea llamado

flags

El método redefinido puede ser RUNKIT_ACC_PUBLIC, RUNKIT_ACC_PROTECTED o RUNKIT_ACC_PRIVATE opcionalmente combinado mediante OR de bits con RUNKIT_ACC_STATIC (desde 1.0.1)

Nota:

Este parámetro sólo se usa a partir de PHP 5, ya que, antes de esta versión, todos los métodos eran públicos.

Valores devueltos

Devuelve true en caso de éxito o false en caso de error.

Ejemplos

Ejemplo #1 Ejemplo de runkit_method_redefine()

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

// crear un objeto de Ejemplo
$e = new Ejemplo();

// imprimir Ejemplo::foo() (antes de redefinir)
echo "Antes: " . $e->foo();

// Redefinir el método 'foo'
runkit_method_redefine(
'Ejemplo',
'foo',
'',
'return "bar!\n";',
RUNKIT_ACC_PUBLIC
);

// imprimir Ejemplo::foo() (después de redefinir)
echo "Después: " . $e->foo();
?>

El resultado del ejemplo sería:

Antes: foo!
Después: bar!

Ver también

add a note add a note

User Contributed Notes 1 note

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