<?php
// explicit mention of methods that should be fluent
// would be preferable to returning $this on null
// since a method may very well return null as something
// that is expected.
class Foo
{
public function bar()
{
var_dump(__METHOD__);
}
public function baz()
{
var_dump(__METHOD__);
}
public function bat()
{
var_dump(__METHOD__);
return 'bat!';
}
}
class FluentWrapper
{
private $instance;
private $fluentMethods;
public function __construct($instance, array $fluentMethods = array())
{
$this->instance = $instance;
$this->fluentMethods = $fluentMethods;
}
public function __call($name, $args)
{
$result = call_user_func(array($this->instance, $name), $args);
return in_array($name, $this->fluentMethods) ? $this : $result;
}
}
class FluentFoo extends FluentWrapper
{
public function __construct(Foo $foo)
{
parent::__construct($foo, array('bar', 'baz'));
}
}
$foo = new FluentFoo(new Foo());
$bat = $foo
->bar()
->baz()
->bar()
->baz()
->bat();
print $bat."\n";
Parse error: parse error, unexpected T_ARRAY, expecting '&' or T_VARIABLE in /in/Jpl5e on line 32
Process exited with code 255.
Output for 4.4.2 - 4.4.9
Parse error: syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /in/Jpl5e on line 10
Process exited with code 255.
Parse error: parse error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /in/Jpl5e on line 10
Process exited with code 255.
Output for 4.3.2 - 4.3.4
Parse error: parse error, expecting `T_OLD_FUNCTION' or `T_FUNCTION' or `T_VAR' or `'}'' in /in/Jpl5e on line 10
Process exited with code 255.