Comments 38
В общем вроде бы прикольно, но вроде особо то и не надо ;)
Да и пакетов прилично: https://github.com/Tucker-Eric/EloquentFilter
($x) ==> $x + $y;
как вам?
"==>" все же уродство как по мне.
Идеально, конечно, ($x) => $x + $y
, но тут см. описанные в rfc проблемы с неоднозначностью синтаксиса и сложностями реализации в рамках используемого парсера.
Из оставшихся вариантов мне наиболее симпатичен \($x) => $x + $y
: "\" как обозначение lambda уже используется в других языках, невозможно ни с чем спутать в хитровложенных конструкциях, просто для реализации, и, кажется, в тривиальном случае с одним аргументом нет проблем с реализацией сокращенного синтаксиса: \$x => $x + $y
.
Дело в том, что если вы захотите добавить эту лямбду \$x => $x + $y
(как и \($x) => $x + $y
) в массив, то возникнет неоднозначность при парсинге.
Где неоднозначность? \($x)
ключом массива быть не может, без стрелочки и тела это ничего не значит. Если бы речь шла о PHP5, я бы еще понял проблему, но в семерке-то AST как-никак.
Бэкслеш сейчас разделитель неймспейсов, переменные и прочую динамику там использовать нельзя (в явном виде, по крайней мере), соответственно, комбинации \(
и \$
это однозначно лямбды.
Однако не соглашусь по поводу симпатичности, поскольку обратная черта — это: разделитель пространств имен; экранирующий символ; перекликается с &$x, являясь, по сути, ключевым словом, а не модификатором доступа; то же самое относительно унарных операторов.
Как ниже писал SerafimArts, потому что очень похоже на вызов метода/получения поля у объекта. Попробуй разглядеть волнистая ли линия при беглом просмотре.
$a->$b;
$a~>$b;
"\" как обозначение lambda уже используется в других языках
Это, например, в каких? Ну, кроме Haskell.
Самый нормальный вариант)
I personally use it because I like to quickly tell if I am doing an operation on a string or array, it is eye candy and makes a lot of sense. I think if anything the two syntaxes should be decoupled instead.
Internally, PHP strings are byte arrays. As a result, accessing or modifying a string using array brackets is not multi-byte safe, and should only be done with strings that are in a single-byte encoding such as ISO-8859-1.
Нельзя просто так взять, и обратиться к символу строки как к элементу массива.
Разве кто-то ещё разрабатывает проекты на однобайтовых кодировках?
Ну вот буквально позавчера развлекался с чтением/записью опкеша напрямую из PHP и там вообще нет намёка на mb_x, а место под структуры резервируется строго в единицах объёма памяти. А сегодня писал функцию, которая под байтовому сдвигу получает линию и позицию в тексте и тот факт, что отрежет половину utf-чара не должен волновать особо.
Ну т.е. да, на всяких типовых проектах оно мало где применяется, а в библиотечном коде сплошь и рядом. Вот такие вот дела.
habr.com/ru/post/315430/#comment_9915398
Код php использует официальный протокол Меркуриев и идеи от дядьки, код которого очень помог разобраться в протоколе. В моём примере пароль админа в счётчике заменён на стандартный. По умолчанию адрес счётчика — это последние 2 или 3 цифры в серийном номере. Каждая moxa и её порт опрашиваются параллельно. Запрашиваем по одному все счётчики, висящие на одном порту moxa.
Собственно сам код
www.yiiframework.com/news/203/yii-2-0-17
упс, php_manual_ru.tar.gz исправился
php_manual_ru.chm пока нет
спасибо, значит услышали
PHP-Дайджест № 152 (11 – 25 марта 2019)