Мне сегодня показали вот такой код и спросили, знал ли я, что так можно. Речь идёт о вызове $this::w00t(). То есть мы используем $this как бы в статическом контексте. Мне бы такое в голову не пришло.
Код ниже, понятное дело, чисто демонстрационный.
Нет, я не знал, но, как ни удивительно, эта конструкция работает! Причём работает уже очень давно — это не свежее веяние: она появилась ещё в версии 5.4!
(new class() {
public function w00t():void {
echo "WHAT THE HELL ARE YOU?\n";
}
public function test():void {
$this::w00t();
}
})->test();Дополнено: работает как эквивалент static, что ожидаемо, конечно.
Насколько я понял, это типо как в пайтоне:
@staticmethod
def s():
print(«ok»)
def m(self):
self.s()
Но выглядит эстетичней.
Обычный и привычный способ работы с «$this» такой: «$this->w00t()». Через двоеточия — это статический контекст.
Да, как в перле. Только в перле это не работает. А примером я хотел написать, что Пайтон сам видит контекст и если метод статический, то объект не передаёт. В этом элегантность
Ну, я знаю и как в Перле, и как в Пайтоне, но мне не кажется, что похоже.