This method can be used to call a overwritten public method of a parent class on an child instance
The following code will output "A":
<?php
class A
{
public function foo()
{
return __CLASS__;
}
}
class B extends A
{
public function foo()
{
return __CLASS__;
}
}
$b = new B();
$reflection = new ReflectionObject($b);
$parentReflection = $reflection->getParentClass();
$parentFooReflection = $parentReflection->getMethod('foo');
$data = $parentFooReflection->invoke($b);
echo $data;
?>
ReflectionMethod::invoke
(PHP 5)
ReflectionMethod::invoke — Invoque
Description
Invoque une méthode reflétée.
Liste de paramètres
-
object -
L'objet sur lequel invoquer la méthode. Pour les méthodes statiques, vous pouvez passer null comme paramètre.
-
parameter -
Paramètres à passer à la méthode. Une liste variable de paramètres à passer est utilisée.
Valeurs de retour
Retourne le résultat de la méthode.
Erreurs / Exceptions
Une ReflectionException si object
n'est pas une instance de la classe possédant la méthode réfléchie.
Une ReflectionException si l'invocation de la méthode échoue.
Exemples
Exemple #1 Exemple avec ReflectionMethod::invoke()
<?php
class HelloWorld {
public function sayHelloTo($name) {
return 'Hello ' . $name;
}
}
$reflectionMethod = new ReflectionMethod('HelloWorld', 'sayHelloTo');
echo $reflectionMethod->invoke(new HelloWorld(), 'Mike');
?>
L'exemple ci-dessus va afficher :
Hello Mike
Notes
Note:
Si la fonction a des arguments qui ont besoin d'être des références, alors ils doivent être passés par références dans la liste des arguments.
Voir aussi
- ReflectionMethod::invokeArgs() - Invoque les arguments
- __invoke()
- call_user_func() - Appelle une fonction de rappel fournie par le premier argument
Seems that Reflection doesn`t resolve late static bindings - var_dump will show "string 'a' (length=1)".
<?php
class ParentClass { protected static $a = 'a'; static public function init() { return static::$a; } }
class ChildClass extends ParentClass { protected static $a = 'b'; }
$r = new ReflectionClass('ChildClass');
var_dump($r->getMethod('init')->invoke(null));
?>
Note: If you want to invoke protected or private methods, you'll first have to make them accessible using the setAccessible() method (see http://php.net/reflectionmethod.setaccessible ).
