Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
PHP Anonymous Object
<?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();
@nick-mok

This comment has been minimized.

Copy link

@nick-mok nick-mok commented Jun 25, 2013

Thanks a tonne for this! I modified it so you can make properties whilst you initialize a new instance. Check it out:
https://gist.github.com/nickunderscoremok/5857846

I also forked it.

It was fun to learn and work with your code sir! :)

@Mihailoff

This comment has been minimized.

Copy link
Owner Author

@Mihailoff Mihailoff commented Sep 16, 2013

Good to know that this is helpful for someone!

@kielsoft

This comment has been minimized.

Copy link

@kielsoft kielsoft commented Jun 19, 2014

Awesome, that really solved it for me.

@angeli

This comment has been minimized.

Copy link

@angeli angeli commented Apr 21, 2016

Thanks from me as well, helped me a lot with testing stuff 👍

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.