// in class
public function test () {
$this->__invoke();
}
$inst->test();
Этот тест выполняется без ошибок.
Мой вопрос: есть ли причина, почему это не должно быть сделано? Есть ли какие-либо случаи, скрытые предостережения или они ведут себя как обычные функции / методы?
Это не должно работать, так как нет __invoke()
метод в вашем классе:
class SomeClass {
public function test()
{
$this->__invoke();
}
}
$inst = new SomeClass();
$inst->test();
Если вы реализуете __invoke()
, что должно работать:
class SomeClass {
public function __invoke()
{
var_dump('Invoke!');
}
}
$inst = new SomeClass();
$inst();
Магические методы можно вызывать напрямую, как вы можете видеть во втором тесте, но, на мой взгляд, это не очень хорошая идея, поскольку они являются своего рода хуками, и их код может быть выполнен неожиданно.
Других решений пока нет …