Difference between revisions of "Objective-PHP"

From Electriki
Jump to navigationJump to search
(Created page with "<code> <?="shit" ?> </code>")
 
Line 1: Line 1:
 +
This is something i wrote some time in 2k9 just for the hell of it
 
<code>
 
<code>
<?="shit" ?>
+
<?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));
 +
}
 
</code>
 
</code>

Revision as of 22:23, 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)); }