First commit
This commit is contained in:
parent
d717c6303d
commit
f604e0f04a
79
JSObject.php
Normal file
79
JSObject.php
Normal file
@ -0,0 +1,79 @@
|
||||
<?php
|
||||
/**
|
||||
* JSObject
|
||||
*
|
||||
* A PHP class to have an analoge to javascript's object literals
|
||||
*
|
||||
* @package JSObject
|
||||
* @author Timothy J. Warren
|
||||
* @copyright Copyright (c) 2012
|
||||
* @link https://github.com/aviat4ion/JSObject
|
||||
*/
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* JSObject class
|
||||
*
|
||||
* @package JSObject
|
||||
*/
|
||||
class JSObject {
|
||||
|
||||
/**
|
||||
* Create the object
|
||||
*
|
||||
* @param mixed
|
||||
*/
|
||||
public function __construct($params = [])
|
||||
{
|
||||
foreach($params as $name => &$val)
|
||||
{
|
||||
// Bind '$this' for closures
|
||||
if ($val instanceof Closure)
|
||||
{
|
||||
$val->bindTo($this);
|
||||
}
|
||||
|
||||
// Add the parameter to the object
|
||||
$this->$name = $val;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Magic method to invoke appended closures
|
||||
*
|
||||
* @param string
|
||||
* @param array
|
||||
* @return mixed
|
||||
*/
|
||||
public function __call($name, $params = [])
|
||||
{
|
||||
if (is_callable($this->$name))
|
||||
{
|
||||
return call_user_func_array($this->$name, $params);
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* Treat invokation of the object as creating a new object
|
||||
*
|
||||
* @param mixed
|
||||
* @return JSObject
|
||||
*/
|
||||
public function __invoke($params = [])
|
||||
{
|
||||
$class = __CLASS__;
|
||||
|
||||
// Create the new object
|
||||
$obj = new $class();
|
||||
|
||||
// Pass the parameters to the constructor of the new object
|
||||
$obj = call_user_func_array([$obj, '__construct'], $params);
|
||||
|
||||
return $obj;
|
||||
}
|
||||
}
|
||||
|
||||
// End of JSObject.php
|
Loading…
Reference in New Issue
Block a user