Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Анонимные классы в PHP
Форумы портала PHP.SU » Разное » Прочее » Анонимные классы в PHP

Страниц (1): [1]
 

1. EuGen - 23 Сентября, 2013 - 13:18:39 - перейти к сообщению
Приветствую,

Хочу поделиться с сообществом некоторыми мыслями в плане развития языка PHP в целом. В дальнейшем подобные обсуждения, возможно, я буду поднимать снова, если данное покажет состоятельность и смысл их проведения.

Так случилось, что некоторое время я общаюсь с разработчиками PHP напрямую, что даёт мне возможность узнать некоторые новые вещи - и возможность их обсудить. Иногда мы делимся мнениями о том, какой вектор развития следует придать языку - какие новые возможности стоит вводить и т.п.

В настоящий момент замечательный разработчик Joe Watkins (автор небезызвестного APC для PHP) предложил ввести анонимные классы. Они подобны существующим анонимным функциям, но более функциональны и гибки. Детали можно посмотреть здесь.

Собственно, я хочу услышать мнения - стоит ли это разработки? Нужна ли такая функциональность? Если да, то, возможно, несколько в другом виде? Буду благодарен за конструктивные мнения и советы, обещаю наиболее интересные из них донести до разработчиков.

Просьба заранее - не писать только "Да/Нет/Всё равно" - так как такие ответы могли бы быть получены и без специального обсуждения, это - не "сбор подписей", но получение идей для развития, и, значит, предполагается конструктивизм. Надеюсь на понимание.
2. esterio - 23 Сентября, 2013 - 13:24:48 - перейти к сообщению
синтаксис похож на JS, тоесть обьявления класса и вызов конструктора с параметром $controller. Меня больше волнует то, что будет еще более магии в коде и поиск связей будет еще менее прозрачним нежели сейчас. Ну и конешно PHPDoc не будет видавать подсказок сначала. Ну и описание целого анонимного класса не будет отличаться от описания обычного. Я думаю оно хорошо как новая возможность и фича, но не более. Будет что-то вроде трейтов - как бы существует, но не особо нужна ИМХО
3. EuGen - 23 Сентября, 2013 - 13:48:09 - перейти к сообщению
Ещё более хотелось бы услышать - почему стоит/не стоит их делать? То есть причина "почему бы и нет, такое в Java есть уже давно" или "не очень понятно в javascript, не стоит и здесь" - не совсем то, что хотелось бы видеть. Каковы плюсы/минусы использования? Какие возможности можно было бы охватить этим функционалом? и т.п.
4. esterio - 23 Сентября, 2013 - 14:18:59 - перейти к сообщению
Ну например помниться мнин-фреймворк silex
Там бы ето пригодилось вместо
Спойлер (Отобразить)


Можно описать так
PHP:
скопировать код в буфер обмена
  1. $app->get('/hello/awesome/pink', new class extends BaseController {
  2.    public function actionIndex() { /*...*/ }
  3.    public function actionCreate() { /*...*/ }
  4.    public function actionUpdate() { /*...*/ }
  5.    public function actionDelete() { /*...*/ }
  6. });


Пока что придумал только такой функционал.
5. EuGen - 23 Сентября, 2013 - 14:26:30 - перейти к сообщению
Пример любопытный. Возможно, от него можно в качестве производных получить и другие случаи, когда такое использование обосновано и ведёт к упрощению кода. Имею ввиду формализацию всех подобных случаев и выделение основы, когда применение анонимных классов решает задачу более гибким и простым способом.
6. caballero - 23 Сентября, 2013 - 15:10:38 - перейти к сообщению
анонимные классы есть в яве (как и inner классы). Вещь полезная если с умом использовать. Во всяком случает полезнее трейтов и елдов которые так и непонятно для чего. Я имею ввиду непонятно практическое примерение.

Опять же в яве анонимные классы включают в себя контекст класов в которых они вызываются (по аналогии с лямбда функциями).
если будут сделаны так же криво как замыкания то толку будет немного.

Но любое такое изменение усложняет компилятор со всеми вытекающими последствиями.

А еще было бы неплохо заполучить в PHP нормальные аннотации. Пусть без имплементации как в яве но хотя бы чтобы не использовать интроспекцию и не боятся что какой нибудь опкодекешер их порежет вместе с коментариями.

как говорят в Одессе - мое ИМХО.
7. EuGen - 23 Сентября, 2013 - 16:23:04 - перейти к сообщению
caballero пишет:
Я имею ввиду непонятно практическое примерение.

И какое применение этим классам в PHP Вы видите? Можете привести некоторые примеры? (как esterio сообщением выше)
8. caballero - 23 Сентября, 2013 - 18:06:13 - перейти к сообщению
особо широкого не вижу. Без них вполне можно обойтись.

В основном наверно всякие собитийно-ориетированные решения. Приблизительно как замыкания но с тем преимуществом что это все таки класс а не отдельная функция.
то есть анонимный клас наследует существенный функционал.

к примеру есть некий объект на который нужно повесить обработчик. вместо вешать калбек создается анонимный класс этого компонента а обработчик просто функция которая переопределяет родительский и выполняет необходимые в даном контексте действия
9. EuGen - 24 Сентября, 2013 - 13:59:18 - перейти к сообщению
caballero
Пример хороший, мне нравится (в основном, тем - что описывает целый класс для случаев, когда применимость оправдана). Хотелось бы увидеть ещё мнения.
10. EuGen - 15 Октября, 2013 - 11:59:11 - перейти к сообщению
По результатам голосования данный функционал был отклонён [9/23].
11. Мелкий - 01 Апреля, 2015 - 17:12:41 - перейти к сообщению
И, полтора года спустя они же: https://wiki.php.net/rfc/anonymous_classes
Приняты голосованием 50 за к 2 против.

 

Powered by ExBB FM 1.0 RC1