ConFoo: Call for paper is now Open

runkit_method_redefine

(PECL runkit >= 0.7.0)

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

Descripción

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

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

Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

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

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 2 notes

up
0
lauri dot piisang at cashongo dot co dot uk
2 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));
?>
up
0
anton at bondarenko.cc
2 years ago
In last runkit versions you can also use RUNKIT_ACC_STATIC constant as flags parametr to redifine static function.
To Top