Skip to content

Instantly share code, notes, and snippets.

@hlev
Forked from Mihailoff/AnObj.php
Created May 18, 2014 12:43
Show Gist options
  • Save hlev/bfbb06dfb4910524b32d to your computer and use it in GitHub Desktop.
Save hlev/bfbb06dfb4910524b32d to your computer and use it in GitHub Desktop.
<?php
/**
* PHP Anonymous Object
*/
class AnObj
{
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 exists");
return call_user_func_array($callable, $arguments);
}
}
// USAGE
// define by passing in constructor
$anonim_obj = new AnObj(array(
"foo" => function() { echo "foo \n"; },
"bar" => function($bar) { echo $bar; }
));
$anonim_obj->foo();
$anonim_obj->bar("hello, world \n");
// define at runtime
$anonim_obj->zoo = function() { echo "zoo \n"; };
$anonim_obj->zoo();
// mimic self
$anonim_obj->prop = "property \n";
$anonim_obj->propMethod = function() use($anonim_obj) { echo $anonim_obj->prop; };
$anonim_obj->propMethod();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment