- array_slice: documentation ( source)
<?php
trait StaticCall {
protected function callStatic($className, $methodName) {
$parameters = func_get_args();
$parameters = array_slice($parameters, 2);
return call_user_func_array($className . '::' . $methodName, $parameters);
}
}
class ParentClass {
public function foo() { echo __METHOD__; }
}
class ChildClass extends ParentClass {
use StaticCall;
public function foo() {
$this->callStatic('parent', 'foo');
}
}
class GrandChildClass extends ChildClass {
use StaticCall;
}
$c = new GrandChildClass();
$c->foo();