1.
private static function flatmap(callable $fn, array $array)
{
if (empty($array)) {
return [];
}
return array_merge(...array_map($fn, $array));
}
Что значит ... в аргументе функции в данном примере? И где про это почитать можно?
$result = $m ?: $path; Корректно ли писать такие конструкции? Могут ли приводить к ошибкам или нежелательным последствиям? В языке с++ такая конструкция вызвала бы ошибку при $m == true, т.к. была бы попытка присвоить переменной "ничего". Что в этом случае будет присвоено переменной, значение не поменяется?
Правильно понимаю, что это одно и тоже,
$m ? 0 : $result = $path; ?
3.
$reference && $wrapperLink = function (& $linkParam) use ($self, $eventType, $handler, $reference) { .. }
Можно ли использовать такие конструкции без опасения возникновении ошибок?
Правильно понимаю, что переменной $wrapperLink будет присвоена функция только если $reference == true ?
Получается, что на практике вмеcто этой конструкции: if($soveVar) someFaction(); можно писать так: $soveVar && someFaction(); ?
Как ни странно ответы на все ваши вопросы можно найти в документации
Что значит ... в аргументе функции в данном примере? И где про это почитать можно?
... это оператор упаковки/распаковки аргументов функции в массив. Употребляется в обе стороны. Строка вашего кода array_merge(...array_map($fn, $array)); будет равносильна (условно)
$data = array_map($fn, $array);
array_merge($data[0], $data[1], .... $data[N]);
то есть каждый элемент массива будет передан в функцию в качестве отдельного аргумента. Можно использовать в обратную сторону function(...$args){} при вызове $func($a, $b) в качестве аргументов получим массив $args = [$a, $b].
Примеры можно посмотреть в разделе "Списки аргументов переменной длины"
Корректно ли писать такие конструкции?
Вполне корректно, пример данной записи и логика ее работы приведена в описании тернарного оператора
Начиная с версии PHP 5.3 также стало возможным не писать среднюю часть тернарного оператора. Выражение expr1 ?: expr3 возвращает expr1 если expr1 имеет значение TRUE и expr3 в противном случае.
отсюда следует, что следующее ваше суждение ошибочно.
Правильно понимаю, что это одно и тоже
Относительно вопроса 3. Тут ваши рассуждения корректны. Как и подавляющее большинство других языков, пхп не использует полное вычисление логических выражений. В целом подобная запись снижает читабельность и понятность кода, так что решайте сами, стоит ли ее применять. На практике такая форма записи чаще встречается, например, в JS, а не PHP.
Продвижение своими сайтами как стратегия роста и независимости