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 использовались разные альтернативы открытым тегам <?php … ?> для обозначения начала PHP-кода. Большая часть этих альтернатив была удалена из языка после выхода версии 7.0. Однако некоторые из коротких открытых тегов PHP остались.</p>
35
<p>В PHP использовались разные альтернативы открытым тегам <?php … ?> для обозначения начала 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>