HTML Diff
1 added 1 removed
Original 2026-01-01
Modified 2026-02-26
1 <p>В конце 2019 года вышла новая версия PHP. В этой статье пойдёт речь о возможностях PHP 7.4.</p>
1 <p>В конце 2019 года вышла новая версия PHP. В этой статье пойдёт речь о возможностях PHP 7.4.</p>
2 <p>PHP - один из самых востребованных языков программирования. Он широко используется в веб-разработке:<a>на PHP написаны популярные CMS, в том числе WordPress, Joomla!, Drupal</a>. На этом языке созданы<a>фреймворки Laravel, Yii2 и Symfony</a>, которые активно используют веб-разработчики.</p>
2 <p>PHP - один из самых востребованных языков программирования. Он широко используется в веб-разработке:<a>на PHP написаны популярные CMS, в том числе WordPress, Joomla!, Drupal</a>. На этом языке созданы<a>фреймворки Laravel, Yii2 и Symfony</a>, которые активно используют веб-разработчики.</p>
3 <p>Давайте посмотрим, какие инструменты появились у разработчиков после выхода PHP 7.4.</p>
3 <p>Давайте посмотрим, какие инструменты появились у разработчиков после выхода PHP 7.4.</p>
4 <h2>Содержание</h2>
4 <h2>Содержание</h2>
5 <ul><li><a>Новая версия делает PHP более выразительным</a></li>
5 <ul><li><a>Новая версия делает PHP более выразительным</a></li>
6 <li><a>Устаревшие конструкции</a></li>
6 <li><a>Устаревшие конструкции</a></li>
7 <li><a>Повышение производительности</a></li>
7 <li><a>Повышение производительности</a></li>
8 <li><a>Ковариантные возвраты и контравариантные параметры</a></li>
8 <li><a>Ковариантные возвраты и контравариантные параметры</a></li>
9 <li><a>О перспективах</a></li>
9 <li><a>О перспективах</a></li>
10 </ul><h2>Новая версия делает PHP более выразительным</h2>
10 </ul><h2>Новая версия делает PHP более выразительным</h2>
11 <p>Версия PHP 7.3 принесла в язык новый синтаксис и производительность. А PHP 7.4 делает код более удобным, читабельным и простым в поддержке. Благодаря этому язык становится быстрее и надёжнее. Ниже описаны основные нововведения версии 7.4.</p>
11 <p>Версия PHP 7.3 принесла в язык новый синтаксис и производительность. А PHP 7.4 делает код более удобным, читабельным и простым в поддержке. Благодаря этому язык становится быстрее и надёжнее. Ниже описаны основные нововведения версии 7.4.</p>
12 <h3>Стрелочные функции</h3>
12 <h3>Стрелочные функции</h3>
13 <p>PHP-программисты давно ждали появления стрелочных функций, похожих на<a>стрелочные функции в JavaScript</a>. Такой синтаксис проще использовать. Однако функции массивов в PHP, известные как короткие замыкания, отличаются от стрелочных функций в JS.</p>
13 <p>PHP-программисты давно ждали появления стрелочных функций, похожих на<a>стрелочные функции в JavaScript</a>. Такой синтаксис проще использовать. Однако функции массивов в PHP, известные как короткие замыкания, отличаются от стрелочных функций в JS.</p>
14 - <p>В PHP 7.4 появляется ключевое слово fn. Короткие замыкания могут содержать только одно выражение без ключевого слова return. Стрелочные функции в PHP - не такой мощный иструмент, как их "тёзки" из JavaScript. Но в некоторых ситуациях они становятся оптимальным инструментом.</p>
14 + <p>В PHP 7.4 появляется ключевое слово fn. Короткие замыкания могут содержать только одно выражение без ключевого слова return. Стрелочные функции в PHP - не такой мощный инструмент, как их "тёзки" из JavaScript. Но в некоторых ситуациях они становятся оптимальным инструментом.</p>
15 <h3>Типизированные свойства PHP</h3>
15 <h3>Типизированные свойства PHP</h3>
16 <p>Приведение типов появилось в PHP 5.0. В более поздних версиях эта функциональность развивалась. В версии 7.0 появились типы возвращаемых значений. В PHP 7.4 ввели объявление типов для свойств классов.</p>
16 <p>Приведение типов появилось в PHP 5.0. В более поздних версиях эта функциональность развивалась. В версии 7.0 появились типы возвращаемых значений. В PHP 7.4 ввели объявление типов для свойств классов.</p>
17 <p>Типизированные свойства работают внутри классов и требуют модификаторов доступа. Чтобы лучше понять концепцию, рассмотрим пример.</p>
17 <p>Типизированные свойства работают внутри классов и требуют модификаторов доступа. Чтобы лучше понять концепцию, рассмотрим пример.</p>
18 <p>В коде выше значением свойства $id может быть только число, а значением $title - строка. Если вы попытаетесь использовать другие типы данных, получите фатальную ошибку.</p>
18 <p>В коде выше значением свойства $id может быть только число, а значением $title - строка. Если вы попытаетесь использовать другие типы данных, получите фатальную ошибку.</p>
19 <h3>Распаковка внутри массивов</h3>
19 <h3>Распаковка внутри массивов</h3>
20 <p>Распаковка аргументов появилась в PHP 5.6. А начиная с версии 7.4 можно пользоваться распаковкой внутри массивов. Это должно быть быстрее, чем array_merge() благодаря спред-оператору.</p>
20 <p>Распаковка аргументов появилась в PHP 5.6. А начиная с версии 7.4 можно пользоваться распаковкой внутри массивов. Это должно быть быстрее, чем array_merge() благодаря спред-оператору.</p>
21 <p>В коде ниже видно, как работает распаковка внутри массива.</p>
21 <p>В коде ниже видно, как работает распаковка внутри массива.</p>
22 <h3>Присваивающий оператор объединения с null</h3>
22 <h3>Присваивающий оператор объединения с null</h3>
23 <p>Это нововведение упрощает код в некоторых ситуациях. Фактически это быстрый способ объединить проверку isset() с тернарным оператором. В примере ниже видно, как можно обратиться к значению ключа id в ассоциативном массиве $product. Если значение ключа установлено, то вновь устанавливается то же значение. Если оно не установлено, присваивается значение справа. Показаны примеры кода на PHP 7.0 и 7.4. Видно, что последняя версия лаконичнее.</p>
23 <p>Это нововведение упрощает код в некоторых ситуациях. Фактически это быстрый способ объединить проверку isset() с тернарным оператором. В примере ниже видно, как можно обратиться к значению ключа id в ассоциативном массиве $product. Если значение ключа установлено, то вновь устанавливается то же значение. Если оно не установлено, присваивается значение справа. Показаны примеры кода на PHP 7.0 и 7.4. Видно, что последняя версия лаконичнее.</p>
24 <h3>Слабые ссылки</h3>
24 <h3>Слабые ссылки</h3>
25 <p>Эта возможность позволяет разработчикам сохранять ссылки на объекты. Сохранение ссылки не исключает уничтожение объекта. С помощью слабых ссылок (weak references) создаётся подобие кэшированных структур. Пример:</p>
25 <p>Эта возможность позволяет разработчикам сохранять ссылки на объекты. Сохранение ссылки не исключает уничтожение объекта. С помощью слабых ссылок (weak references) создаётся подобие кэшированных структур. Пример:</p>
26 <h2>Устаревшие конструкции</h2>
26 <h2>Устаревшие конструкции</h2>
27 <p>С выходом PHP 7.4 часть возможностей языка переходит в категорию устаревших (deprecations). Язык перестанет их поддерживать.</p>
27 <p>С выходом PHP 7.4 часть возможностей языка переходит в категорию устаревших (deprecations). Язык перестанет их поддерживать.</p>
28 <h3>Вложенный тернарный оператор без скобок</h3>
28 <h3>Вложенный тернарный оператор без скобок</h3>
29 <p>Вложенные тернарные операторы лучше не использовать. В таких конструкциях легко ошибиться. Но если вы всё-таки хотите применить вложенный тернарный оператор, используйте его со скобками. Начиная с версии PHP 7.4 вложенные тернарные операторы без скобок считаются устаревшими.</p>
29 <p>Вложенные тернарные операторы лучше не использовать. В таких конструкциях легко ошибиться. Но если вы всё-таки хотите применить вложенный тернарный оператор, используйте его со скобками. Начиная с версии PHP 7.4 вложенные тернарные операторы без скобок считаются устаревшими.</p>
30 <h3>Использование array_key_exists() с объектами</h3>
30 <h3>Использование array_key_exists() с объектами</h3>
31 <p>Не используйте array_key_exists() с объектами, так как объекты - не массивы. Вместо этого лучше использовать функцию property_exists() или isset ().</p>
31 <p>Не используйте array_key_exists() с объектами, так как объекты - не массивы. Вместо этого лучше использовать функцию property_exists() или isset ().</p>
32 <h3>Обращение к индексу массива или строки с помощью фигурных скобок</h3>
32 <h3>Обращение к индексу массива или строки с помощью фигурных скобок</h3>
33 <p>Использование фигурных скобок для обращения к индексу массива или строки в реальном коде встречается редко. А начиная с версии PHP 7.4 такой код считается устаревшим.</p>
33 <p>Использование фигурных скобок для обращения к индексу массива или строки в реальном коде встречается редко. А начиная с версии PHP 7.4 такой код считается устаревшим.</p>
34 <h3>Короткие открытые теги</h3>
34 <h3>Короткие открытые теги</h3>
35 <p>В PHP использовались разные альтернативы открытым тегам &lt;?php … ?&gt; для обозначения начала PHP-кода. Большая часть этих альтернатив была удалена из языка после выхода версии 7.0. Однако некоторые из коротких открытых тегов PHP остались.</p>
35 <p>В PHP использовались разные альтернативы открытым тегам &lt;?php … ?&gt; для обозначения начала PHP-кода. Большая часть этих альтернатив была удалена из языка после выхода версии 7.0. Однако некоторые из коротких открытых тегов PHP остались.</p>
36 <p>Примеры:</p>
36 <p>Примеры:</p>
37 <h2>Повышение производительности</h2>
37 <h2>Повышение производительности</h2>
38 <p>Главная мотивация перейти на PHP 7.4 - повышение производительности. В версии 7.4 используется предварительная загрузка. Она реализована с помощью расширения Opcache. Это расширение сохраняет в общей памяти предварительно скомпилированный байткод. Благодаря этому не нужно загружать скрипты при каждом запросе.</p>
38 <p>Главная мотивация перейти на PHP 7.4 - повышение производительности. В версии 7.4 используется предварительная загрузка. Она реализована с помощью расширения Opcache. Это расширение сохраняет в общей памяти предварительно скомпилированный байткод. Благодаря этому не нужно загружать скрипты при каждом запросе.</p>
39 <p>Opcache работает с опкодом - упрощённым или низкоуровневым представлением PHP-кода. Расширение предварительно компилирует написанный разработчиком код в опкод и загружает в память. Так работает предварительная загрузка.</p>
39 <p>Opcache работает с опкодом - упрощённым или низкоуровневым представлением PHP-кода. Расширение предварительно компилирует написанный разработчиком код в опкод и загружает в память. Так работает предварительная загрузка.</p>
40 <p>Этот механизм работает быстрее альтернативы: загрузки файлов при каждом запросе. В конечном итоге благодаря предварительной загрузке растёт производительность PHP 7.4.</p>
40 <p>Этот механизм работает быстрее альтернативы: загрузки файлов при каждом запросе. В конечном итоге благодаря предварительной загрузке растёт производительность PHP 7.4.</p>
41 <h2>Ковариантные возвраты и контравариантные параметры</h2>
41 <h2>Ковариантные возвраты и контравариантные параметры</h2>
42 <p>До выхода версии 7.4 в PHP использовались преимущественно инвариантные параметры и возвращаемые типы. В новой версии вводится ковариантность и контравариантность для типов возвращаемых данных и параметров.</p>
42 <p>До выхода версии 7.4 в PHP использовались преимущественно инвариантные параметры и возвращаемые типы. В новой версии вводится ковариантность и контравариантность для типов возвращаемых данных и параметров.</p>
43 <p>Есть такие типы параметров:</p>
43 <p>Есть такие типы параметров:</p>
44 <ul><li>Инвариантные. Используются, если тип супертипа ограничивает тип подтипа.</li>
44 <ul><li>Инвариантные. Используются, если тип супертипа ограничивает тип подтипа.</li>
45 <li>Ковариантные. Применяются, если порядок типов сохраняется, то есть типы упорядочены от более специфичных к более общим.</li>
45 <li>Ковариантные. Применяются, если порядок типов сохраняется, то есть типы упорядочены от более специфичных к более общим.</li>
46 <li>Контравариантные. Используются при изменении порядка от более общих к более специфичным типам.</li>
46 <li>Контравариантные. Используются при изменении порядка от более общих к более специфичным типам.</li>
47 </ul><p>Код ниже показывает ковариантный и контравариантный типы возврата.</p>
47 </ul><p>Код ниже показывает ковариантный и контравариантный типы возврата.</p>
48 <p>Ковариантный:</p>
48 <p>Ковариантный:</p>
49 <p>Контравариантный:</p>
49 <p>Контравариантный:</p>
50 <h2>О перспективах</h2>
50 <h2>О перспективах</h2>
51 <p>В PHP 7.4 появилось не слишком много новых возможностей, поэтому не все разработчики верят в сильное повышение производительности. В сообществе PHP-программистов идут разговоры о версии 8.0, которая принесёт в язык программирования большие нововведения и серьёзно повысит производительность.Тем не менее точная дата релиза PHP 8.0 пока не объявлена.</p>
51 <p>В PHP 7.4 появилось не слишком много новых возможностей, поэтому не все разработчики верят в сильное повышение производительности. В сообществе PHP-программистов идут разговоры о версии 8.0, которая принесёт в язык программирования большие нововведения и серьёзно повысит производительность.Тем не менее точная дата релиза PHP 8.0 пока не объявлена.</p>
52 <p><em>Адаптированный перевод статьи<a>A Closer Look at PHP’s Latest Version 7.4</a>by Ruchika Singh Aggarwal. Мнение администрации Хекслета может не совпадать с мнением автора оригинальной публикации.</em></p>
52 <p><em>Адаптированный перевод статьи<a>A Closer Look at PHP’s Latest Version 7.4</a>by Ruchika Singh Aggarwal. Мнение администрации Хекслета может не совпадать с мнением автора оригинальной публикации.</em></p>