Objective-PHP

From Electriki
Revision as of 22:25, 14 July 2011 by Yac (talk | contribs)
Jump to navigationJump to search

This is something i wrote some time in 2k9 just for the hell of it <?php /** * @package OPHPLolwut */ Abstract class superObject { private $binded= array(); function __call($name,$args) { if(!isset($this->$name)) { if(!isset($this->binded[$name]) || $this->binded[$name] !== true) throw new noMethodError(); $this->$name= new $name(); } return $this->$name->doIt($this,$args); } /** * @param mixed $i input * @param array $args arguments */ abstract function doIt($i,$args); /** * @var string $name */ function bind($name) { $this->binded[$name]= true; } function unbind($name=null) { if(isset($this->binded[$name])) { $this->binded["name"]= false; unset($this->$name); } } function __construct() { $this->bind('hasMethod'); } } class object extends superObject { function __construct() { parent::__construct(); } function doIt($i,$args) { return $this; } } class superException extends Exception { function __construct($message="",$data=null,$code=0) { parent::__construct($message,$code); $this->data= $data; } } class error extends superException {} class noMethodError extends error {} class hasMethod extends object { function doIt($i,$args) { $method= array_pop($args); return method_exists($i,$method); } } class value extends object { function __construct() { $this->bind('set'); $this->bind('get'); $this->bind('isset_'); } } class set extends object { function doIt($i,$args) { if(count($args) != 1) throw new superException("",$args); if($i instanceOf value) { $i->value= array_pop($args); return $i; } #if($i instanceOf accessor) { $i->value()->set(array_pop($args)); return $i; } return new nil(); } } class get extends object { function doIt($i,$args) { if($i instanceOf value) { if($i->isset_()) return $i->value; } if($i instanceOf accessor) { return $i->value()->get(); } return new nil(); } } class isset_ { function doIt($i,$args) { if($i instanceof value) { if(isset($i->value)) return $i->value; } return new nil(); } } class accessor extends object { function __construct() { $this->bind('value'); } function doIt($i,$args) { if(isset($args[0])) { return $this->value()->set($args[0]); } return $this->value()->get(); } } ############################################################################# try { $a= new accessor(); $a->value()->set("abc123"); echo $a->value()->get(); }catch(SuperException $e) { printf($e->getTraceAsString()." ".$e->getFile()."(".$e->getLine().")\nMessage:".$e->getMessage()."\nData:\n".var_export($e->data,1)); }