Difference between revisions of "Objective-PHP"

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