Construction dynamique d'objet
Tout les développeurs php manient depuis un moment les appels dynamiques de classe du genre :
<?php
$class = 'maclasse';
$obj = new $class();
?>
Appel dynamique de fonction membre
On peut aussi appeler de manière dynamique des méthodes membre de classe :
<?php
$class = 'maclasse';
$method = 'methodeMembre';
$obj = new $class();
$obj->$method('message');
?>
Appel dynamique de fonction statique
Depuis php 5.3 on peut aussi appeler dynamiquement des méthodes statiques de la même manière :
<?php
$class = 'maclasse';
$method = 'methodeStatique';
$class::$method('message');
?>
Ce code ne fonctionne pas en php 5.2 et il faut ruser pour faire des appels dynamique de méthode statique :
<?php
$class = 'maclasse';
$method = 'methodeStatique';
call_user_func(array($class, $method), 'message');
?>
Classe utilisée pour l'exemple
Et maintenant voici la classe qui m'a permit de tester ces exemples :
<?php
class maclasse
{
public static function methodeStatique($message)
{
var_dump('Methode statique : '.$message);
}
public function methode($message)
{
var_dump('Methode membre : '.$message);
}
}
$class = 'maclasse';
$method = 'methode';
$obj = new $class();
$obj->$method('message');
$method = 'methodeStatique';
/*En php 5.2*/
call_user_func(array($class, $method), 'message');
/**
* Ce code équivaut au code php 5.3 :
* $class::$method('message');
*/
?>
Image : Marttj