Suponha que eu tenha um chamável estático como \Foo::bar
.
Posso atribuir isso a uma variável como esta e então chamá-la:
$myCallable = \Foo::class . '::bar';
// This works.
$myCallable('calling this works!');
Mas se eu atribuir isso a uma propriedade de classe estática como esta:
class MyClass {
function myFunc() {
static::$myCallable = \Foo::class . '::bar';
static::$myCallable('this does not work');
}
}
falha, porque tenta chamar MyClass::Foo::bar()
.
Existe alguma maneira de corrigir isso, além de usar call_user_func()
?
Não é mencionado na documentação de Operator Precedence , mas
::
parece ter precedência menor que a função parenthesis. Isso deve funcionar:Exemplo completo:
Demonstração
agora para sua invocação static:::
Como você pode ver, funciona da mesma forma, mas você precisa de uma variável/propriedade definida.