J'utilise la classe suivante pour imiter des objets anonymes en PHP:
class AnonymousObject
{
protected $methods = array();
public function __construct(array $options) {
$this->methods = $options;
}
public function __call($name, $arguments) {
$callable = null;
if (array_key_exists($name, $this->methods))
$callable = $this->methods[$name];
elseif(isset($this->$name))
$callable = $this->$name;
if (!is_callable($callable))
throw new BadMethodCallException("Method {$name} does not exist");
return call_user_func_array($callable, $arguments);
}
}
(https://gist.github.com/Mihailoff/3700483)
Maintenant, tant que les fonctions déclarées se distinguent par leurs propres moyens tout fonctionne bien, mais chaque fois que je tente d'appeler une fonction de l'autre comme ça ...
$anonymous = new AnonymousObject(array(
"foo" => function() { $this->bar(); },
"bar" => function() { }
));
alors bien sûr je reçois Fatal error: Using $this when not in object context
Y at-il un moyen de contourner ce problème?
Mise à niveau vers PHP7 et vous obtiendrez de véritables classes anonymes: -D – ircmaxell