Comments 19
Потому что во времена php 5.x лексер не умел такие штуки разруливать. В php7 в качестве разделителя нэймспейсов можно юзать уже точки к примеру, но уже обратная совместимость...
Точки нельзя, и даже не из-за лексера. Т.к. конфликтует с конкатенацией дефайнов, тоже самое и с прямым слешем — деление дефайнов. Раньше (в php 6) думали над двойным двоеточием, но под конец убрали, из-за проблем с вложенными классами (напоминаю, в php7 можно чейнить статик методы через A::b()::c()
, но резолв класса из константы пока не работает, в будущем, предполагаю, поправят, так что получится A::b::c
, где b
и с
— константы класса).
Если уж ругаться на что-то, то на оператор конкатенации, вместо плюса, который решает тучу проблем с приведением типов (вспомним JS и его дикий угар с оператором "+"). Отсюда и переиначивание, берут то что есть в других языках, но делают так, чтобы это не было проблемой в будущем, как, например с дженериками в джаве (https://www.youtube.com/watch?v=HE4yyPpUsy4).
Предполагаю, что отсюда и именование аннотаций, пусть и не очень красиво (хотя я бы сказал просто непривычно), но зато консистентно и не будет проблем как, например сейчас с ассоциативными массивами, синтаксис которых был взят под копирку из перла. Хотя, предполагаю, что "двойные скобки" добавят проблем с операторами сдвига в подходах с контрактным программированием.
Короче, я к чему, такой "необычный" синтаксис не потому, что авторы упоролись, а потому что они сидели и долго думали, проектируя язык так, чтобы в будущем не возникало проблем в развитии и введении необходимых фич.
Цитата из статьи:
позволит записывать цепочки вложенных вызовы в более читаемом виде
Экстеншн scalar_objects решает именно эту проблему.
Сорри, это пример плохой в статье приведён с array_fitler и array_map. В самом RFC гораздо более продуктивный пример, который действительно через scalar_objects не решить
Pipe Operator однозначное зло.
когда кто-то завяляет об "однозначности" зла — стоит задуматься в том сколько человек обдумывал эту идею или это чистой воды субъективизм.
Уж лучше бы вмержили расширение scalar_objects Никиты Попова, которое решает ту же самую проблему сильно элегантнее.
Вот только давайте подумаем… pipe-оператор не требует изменения кода, решение от Никиты — требует как минимум обертки. Не знаю как вы, а мне pipe-оператор дико нравится, хоть с функциональными выражениями было бы намного лучше:
$ret = scandir($arg)
|> array_filter($$, $x => $x !== '.' && $x != '..' })
|> array_map($x => $arg . '/' . $x, $$)
|> getFileArg($$)
|> array_merge($ret, $$);
Ну и выбор $$
в качестве плэйсхолдера сомнителен, _
как в JS выглядит уже приятнее и логичнее.
Опять же посмотрим внимательно на пример выше. Предположим что с filter/map никаких проблем, они уже есть в хэндлерах для массивов. Далее допустим мы array_merge
можем заменить на concat
тот же. А что делать с getFileArg
? Выходит пока так:
return $ret->concat(
getFileArg(
scandir($arg)
->filter(function($x) { return $x !== '.' && $x != '..'; })
->map(function ($x) use ($arg) { return $arg . '/' . $x; })
));
Как-то это не сильно решает проблему. И добавлять getFileArg
как хэндлер ЛЮБЫХ массивов явно мы не можем. Делать объектную обертку? Зачем, чистая функция, зачем ее в объект заворачивать...
Словом я двумя руками за, это позволит сильно упростить код некоторых методов моих объектов.
Блин, ну я же там написал уже, что вот эти вот array_map
и array_filter
через пайп оператор ну прямо скажем что неудобно.
Что касается остального — полностью согласен.
Одним словом я не против пайп-оператора, я против того чтобы его наличие стало аргументов против вмерживания scalar_objects.
через пайп оператор ну прямо скажем что неудобно.
Более чем удобно, мне только плэйсхолдер не нравится и отсутствие лямбд. А так — удобно) просто попробуйте)
Вообще надо бы реализовать это дело на yay.
я против того чтобы его наличие стало аргументов против вмерживания scalar_objects.
я не против scalar_objects, я против того что бы убирали возможность работать просто с функциями и против того что бы пользователи могли из userland "манкипатчить" скаляры добавляя свои обработчики.
Прокомментирую, пожалуй, про PHP-FIG. Разлада как такового нет. Покинули группу те, кто достигли своих целей или кто не может найти времени на обсуждения.
CDS пока занятен, но очень хаотичный. Посмотрим, что из него получится.
PHP-Дайджест № 85 – интересные новости, материалы и инструменты (24 апреля – 15 мая 2016)