runkit_method_redefine

(PECL runkit >= 0.7.0)

runkit_method_redefineChange dynamiquement le code de la méthode donnée

Description

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

Note: Cette fonction ne peut être utilisée pour manipuler la méthode en cours d'utilisation (ou chaînée).

Liste de paramètres

classname

La classe dans laquelle la méthode sera redéfinie

methodname

Le nom de la méthode à redéfinir

args

Liste d'arguments séparés par des virgules pour la méthode redéfinie

code

Le nouveau code qui sera évalué lorsque methodname sera appelée

closure

Une closure qui définit la fonction.

flags

La méthode redéfinie peut etre RUNKIT_ACC_PUBLIC, RUNKIT_ACC_PROTECTED ou RUNKIT_ACC_PRIVATE optionnellement combiné via un OR avec RUNKIT_ACC_STATIC (depuis la version 1.0.1)

doc_comment

Le commentaire de documentation de la fonction.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Historique

Version Description
runkit 1.0.4 Une syntaxe alternative s'attendant a une closure a été ajouté.
runkit 1.0.4 Le paramètre optionel doc_comment a été ajouté.

Exemples

Exemple #1 Exemple avec runkit_method_redefine()

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

// Crée un objet Example
$e = new Example();

// Sortie Example::foo() (avant la redéfinition)
echo "Avant : " $e->foo();

// Redéfinition de la méthode 'foo'
runkit_method_redefine(
    
'Example',
    
'foo',
    
'',
    
'return "bar!\n";',
    
RUNKIT_ACC_PUBLIC
);

// Sortie Example::foo() (après la redéfinition)
echo "Après : " $e->foo();
?>

L'exemple ci-dessus va afficher :

Avant : foo!
Après : bar!

Voir aussi

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