Difference between revisions of "Objective-PHP"
From Electriki
Jump to navigationJump to searchLine 1: | Line 1: | ||
This is something i wrote some time in 2k9 just for the hell of it | This is something i wrote some time in 2k9 just for the hell of it | ||
− | < | + | <pre> |
<?php | <?php | ||
Line 131: | Line 131: | ||
printf($e->getTraceAsString()." ".$e->getFile()."(".$e->getLine().")\nMessage:".$e->getMessage()."\nData:\n".var_export($e->data,1)); | printf($e->getTraceAsString()." ".$e->getFile()."(".$e->getLine().")\nMessage:".$e->getMessage()."\nData:\n".var_export($e->data,1)); | ||
} | } | ||
− | </ | + | </pre> |
Latest revision as of 22:26, 14 July 2011
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)); }