Laravel does it the following way
in: vendor/laravel/framework/src/Illuminate/Database/Capsule
/**
* Dynamically pass methods to the default connection.
*
* @param string $method
* @param array $parameters
* @return mixed
*/
public static function __callStatic($method, $parameters)
{
return call_user_func_array(array(static::connection(), $method), $parameters);
}
/**
* Get a connection instance from the global manager.
*
* @param string $connection
* @return \Illuminate\Database\Connection
*/
public static function connection($connection = null)
{
return static::$instance->getConnection($connection);
}
From the PHPDOC:
__callStatic() is triggered when invoking inaccessible methods in a static context.
I think you can simplify this for your class:
class Bar{
public static function __callStatic($method, $parameters)
{
return call_user_func_array(array(new Bar(), $method), $parameters);
}
public function hello(){
echo "hello";
}
}
Bar::hello();