Релиз языка программирования PHP 7.1

Официально представлен релиз языка программирования PHP 7.1. Новая ветка отличающейся значительной порцией новых возможностей и наличием изменений, нарушающих совместимость.

Ключевые улучшения в PHP 7.1:

  • Возможность использования типов, которые могут принимать значение null. Для пометки, что параметры функций и возвращаемые значения могут принимать значение null, применяется знак вопроса, например, определив функцию «function f (? callable $p) {}» её можно вызвать с аргументом null — «f (null)»;
  • Добавлен тип возвращаемого значения void, указывающий на то, что функция не вернула значение. Использование return в функциях, помеченных типом void, приведёт к возникновению ошибки;
  • Добавлен псевдо-тип iterable, позволяющий определять параметры функций, которые могут принимать значения различных перечисляемых типов, допустимых для перебора в цикле, таких как массивы и объекты Traversable;
  • При указании смещения внутри строки теперь можно указывать отрицательные значения, позиция в строке для которых будет рассчитана относительно конца строки. Например, для строки 'abcdef' $str[-2] вернёт «e»;
  • Добавлен вариант конструкции list (), в которой могут задаваться ключи. Например: «list (1 => $oneBit, 2 => $twoBit, 3 => $threeBit) = $powersOfTwo»;
  • Добавлено выражение »[] =», которое выступает альтернативой конструкции «list () =». Например, вместо «list ($a, $b, $c) = array (1, 2, 3)» теперь можно указать »[$a, $b, $c] = [1, 2, 3]»;
  • Реализована система вывода ошибок и предупреждений в случае использования в математических выражениях строк, не преобразуемых в число. Например,»10 apples» + »5 pears» приведёт к выводу ошибки «Notice: A non well formed numeric string encountered in example.php on line 3», а 5 * «orange» к «Warning: A non-numeric string encountered in example.php on line 3»;
  • Возможность обработки нескольких типов исключений в одном выражении catch. Например,»} catch (FirstException | SecondException $e) {»
  • Поддержка определения видимости для констант внутри класса. Константы теперь могут определяться с флагами public, private и protected;
  • Поддержка асинхронной обработки сигналов в ext/pcntl и поддержка дополнительного контекста в обработчике pcntl_signal.

© OpenNet