- Output for 5.4.0 - 5.4.20
- Parse error: syntax error, unexpected ')' in /in/I1J4i on line 35
Process exited with code 255. - Output for 5.3.0 - 5.3.27
- Parse error: syntax error, unexpected '[' in /in/I1J4i on line 12
Process exited with code 255.
<?php
class prototype
{
private $inherited;
private $instance;
public function __construct(prototype $prototype = null)
{
$this->inherited = $prototype;
$this->instance = [];
}
public function __set($name, $value)
{
if ($value instanceof \Closure) {
$value = $value->bindTo($this);
}
$this->instance[$name] = $value;
}
public function __get($name)
{
if (array_key_exists($name, $this->instance)) {
return $this->instance[$name];
} else {
return $this->inherited->$name;
}
}
public function __call($name, $arguments)
{
if (!isset($this->instance[$name]) && isset($this->inherited) && ($fromProto = $this->inherited->$name) instanceof \Closure)) {
$target = $fromProto->bindTo($this);
} else if (isset($this->instance[$name]) && $this->instance[$name] instanceof \Closure) {
$target = $this->instance[$name];
} else {
return;
}
return call_user_func_array($target, $arguments);
}
}
$foo = new prototype;
$foo->foo = 'Foo!';
$foo->bar = function() {
return $this->foo;
};
$bar = new prototype($foo);
$bar->foo = 'Bar!';
echo $foo->bar() . "\n";
echo $bar->bar() . "\n";