Началось бета-тестирование PHP 8
Представлен первый бета-выпуск новой ветки языка программирования PHP 8. Релиз намечен на 26 ноября. Одновременно сформированы корректирующие выпуски PHP 7.4.9, 7.3.21 и 7.2.33, в которых устранены накопившиеся ошибки и уязвимости.
Основные новшества PHP 8:
- Включение JIT-компилятора, применение которого позволит повысить производительность.
- Поддержка именованных аргументов функций, позволяющих передававать в функцию значения в привязке к именам, т.е. можно передавать аргументы в произвольном порядке и определять необязательные аргументы. Например, «array_fill (start_index: 0, num: 100, value: 50)».
- При вызове методов разрешено применение оператора »?», который позволяет инициировать вызов только, если метод присутствует, что позволяет избежать лишних проверок на возврат значения «null». Например,»$dateAsString = $booking→getStartDate ()?→asDateTimeString ()»;
- Поддержка union-типов, определяющих коллекции из двух и более типов (например «public function foo (Foo|Bar $input): int|float;»).
- Поддержка атрибутов (аннотаций), позволяющих привязать метаданные (например, сведения о типах) к классам без использования синтаксиса Docblock.
- Поддержка выражений match, которые в отличие от switch могут возвращать значения, поддерживают комбинирование условий, используют строгое сравнение типов и не требуют указания «break».
$result = match($input) { 0 => "hello", '1', '2', '3' => "world", };
- Сокращённый синтаксис определения классов, позволяющий объединить определение конструктора и свойств.
- Новый тип возвращаемых значений — static.
- Новый тип — mixed, который может применяться для определения приёма функцией параметров с разными типами.
- Выражение throw для обработки исключений.
- WeakMap для создания объектов, которыми можно пожертвовать при сборке мусора (например, для хранения необязательных кэшей).
- Возможность использования выражения »:: class» для объектов (аналог вызова get_class ()).
- Возможность определения в блоке catch исключений, не привязанных к переменным.
- Возможность оставления символа запятой после последнего элемента в списке параметров функции.
- Новый интерфейс Stringable для идентификации любых строковых типов или данных, которых можно преобразовать в строку (для которых доступен метод__toString ()).
- Новая функция str_contains (), упрощённый аналог strpos для определения вхождения подстроки, а также функции str_starts_with () и str_ends_with () для проверки совпадений в начале и конце строки.
- Добавлена функция fdiv (), выполняющая операцию деления без вывода ошибки в случае деления на ноль.
- Изменена логика соединения строк. Например, выражение 'echo «sum:» . $a + $b' ранее интерпретировалось как 'echo («sum:» . $a) + $b', а в PHP 8 будет обработано как 'echo «sum:» . ($a + $b)'.
- Ужесточена проверка арифметических и битовых операций, например, выражения »[] % [42]» и »$object + 4» будут приводить к ошибке.
- Реализован стабильный алгоритм сортировки, в котором при разных запусках сохраняется порядок следования одинаковых значений.
- Источник:
http://www.opennet.ru/opennews/art.shtml? num=53502
© OpenNet