class SomeClass {
__call($functionName, $arguments)
{
return call_user_func([ self, $functionName . '_' ], $arguments);
}
__callStatic($functionName, $arguments)
{
return call_user_func([ self, $functionName . '_' ], $arguments);
}
private function someFunction_(){
if(empty($this))
{
echo 'статичный контекст';
}
else
{
echo 'объектный контекст';
}
}
}
$obj = new SomeClass;
$obj->someFunction(); // 'объектный контекст';
SomeClass::someFunction(); // 'статичный контекст'
Суть в том, что функции доступны и в объектном и в статичном контексте по одному имени/ключу.
Это происходит потому, что функции "someFunction" не существует. И поэтому, вызывается магический метода __call() или __callStatic() в зависимости от контекста. Далее к названию функции добавляется "_" и функция вызывается по имени.
Вот собственно меня и интересует, как называется это прием.