Какая версия php сейчас актуальна
Состоялся релиз языка программирования PHP 8.0
26 ноября 2020 года состоялся релиз языка программирования PHP 8.0.
Сообщество разработчиков пояснило, что новая версия языка PHP содержит множество новых возможностей и оптимизаций, включая именованные аргументы, Union type, атрибуты, упрощенное определение свойств в конструкторе, выражение Match, оператор Nullsafe, добавлено включение JIT-компилятора и сделаны улучшения в системе типов, сравнении строк и чисел, обработке ошибок и консистентности.
Новая версия языка программирования PHP содержит ряд новых функций. Часть ранее используемых в предыдущих версиях PHP функций объявлены устаревшими.
Разработчики внесли в PHP 8.0 некоторые изменения, нарушающие обратную совместимость с предыдущими версиями языка программирования.
Для миграции с PHP 7.4.x на PHP 8.0.x создан специальный раздел на портале php.net. Разработчики просят ознакомиться с документацией и изменениями в PHP 8.0 перед переходом на новую версию, особенно в производственной среде.
Примечательно, что в начале июля 2020 года сервисный инженер и менеджер по проектам PHP в Microsoft Дейл Хирт (Dale Hirt) предупредил сообщество разработчиков PHP, что компания не собирается заниматься поддержкой новых версий PHP, включая 8.0 и выше, для Windows. Представитель сообщества разработчиков PHP ответил Microsoft, что они глубоко признательны компании за проделанную их специалистами работу по поддержке PHP на Windows на протяжении многих лет. Также в сообществе разработчиков PHP сообщили, что примут все необходимые меры, чтобы найти в ближайшее время альтернативный вариант для организации поддержки PHP 8.0 и выше для Windows, например, своими силами.
Статистика использования PHP
Первая ежегодная статистика 2021 используемых версий PHP от Packagist
Статистика использования PHP
Май 2021 г.
Вы можете легко выполнить базовый тест на предмет того, поддерживают ли ваши зависимости PHP 8, используя конфигурацию платформы Composer, запустив, например:
Не забудьте вернуть изменения composer.json, когда закончите данные тесты. Вот сводная диаграмма, охватывающая все наблюдения версий за последние семь лет.
Требования PHP в пакетах
Как и в прошлый раз, версии 7.3/7.4 продолжают набирать обороты, PHP 8 также имеет неплохой старт. Однако самой используемой версией PHP по-прежнему является 7.1. Согласно приведенным выше диаграммам, я бы сказал, что 7.3 по-прежнему является хорошим вариантом для любой библиотеки, которая хочет поддерживать поддержку большинства пользователей, но 7.4 предлагает вам приятные функции и почти на 50% адаптирована, так что это допустимый вариант для нового кода. Процент использование PHP 8 все еще слишком низкий, и вероятно, останется таковым до выпуска Ubuntu 22.04.
Требование PHP 7.2+ охватывает
90% пользовательской базы прямо сейчас, поэтому требовать меньшей версии уже больше нет необходимости, Composer 2.2, выходящий позже в этом году, скорее всего, потребует этого. Кстати, если вы не используете Composer 2, вам действительно стоит подумать об обновлении!
Веб-разработчик со стажем программирования более 9 лет, всегда в процессе учебы и созидания.
PHP-Дайджест № 193 (16 – 30 ноября 2020)
Парад релизов: обновление языка — PHP 8.0, а также Xdebug 3, DBAL 3.0, Bref 1.0, Symfony 5.2, Flysystem 2.0. Первый принятый RFC для PHP 8.1, долгосрочная поддержка PHPUnit, порция полезных инструментов, подкасты, стримы, статьи.
Облако контрибьюторов PHP 8 от php.watch
Наиболее заметные изменения:
• Именованные аргументы
• Атрибуты
• Объединенные типы
• Объявление свойств в конструкторе
• Выражение match
• Оператор nullsafe
• Улучшенное сравнение строк и чисел
• Ошибки согласованности типов для встроенных функций
• JIT
Максимально полный список изменений есть в документе php-src/UPGRADING
Документация по большинству изменений еще в процессе. Присоединиться к ее дополнению можно отправляя пул-реквесты в репозиторий php/doc-en.
С выходом 8.0 закончился период поддержки PHP 7.2, а PHP 7.3 перешел в режим только секьюрити фиксов. Вот инструкция как установить PHP 8.0 на Ubuntu, Debian, CentOS, macOS и в Docker.
Новости и релизы
Для старта достаточно одной опции xdebug.mode, а дефолтный порт сменен на 9003, чтоб не было конфликта с PHP-FPM. Подробнее в руководстве по обновлению.
PHP Internals
Инструменты
Symfony
Laravel
Разное
Аудио/Видео
Спасибо за внимание!
Если вы заметили ошибку или неточность — сообщите, пожалуйста, в личку хабра или телеграм.
Больше новостей и комментариев в Telegram-канале PHP Digest.
Версии PHP: зачем их обновлять и чем они различаются
Почти 80% всех существующих сайтов, по данным W3Techs, работают на базе языка программирования PHP. Значительную их часть составляют сайты, созданные с помощью WordPress и других популярных CMS. Однако, несмотря на такую распространнёность, не все владельцы сайтов знают о необходимости переходить с устаревших версий PHP на более актуальные. Что отражается на качестве работы сайтов.
Кратко о версиях PHP
Какие версии PHP считаются актуальными, а какие — устаревшими? Чтобы разобраться в этом, рассмотрим этапы жизненного цикла версий этого языка:
Релиз. Выпускается новая версия PHP, которая прошла все этапы предварительного тестирования и подходит для использования в «боевых условиях».
Активная поддержка. В течение двух лет после релиза версия продолжает совершенствоваться. Выходят регулярные обновления, вносятся корректировки и исправляются баги. Обеспечивается полная безопасность версии.
Минимальная поддержка. Ровно через два года после релиза работа по развитию версии прекращается. В течение следующего года происходят только критические обновления, касающиеся серьёзных угроз безопасности.
Завершение жизненного цикла. Через год критических обновлений защиты версия перестаёт поддерживаться полностью. Однако ей можно продолжать пользоваться, но уже на свой страх и риск.
На момент публикации этого материала продолжают поддерживаться три версии PHP:
7.4 (дата релиза — 28 ноября 2019 года, самая актуальная версия);
7.3 (дата релиза — 6 декабря 2018 года, активная поддержка подходит к концу);
7.2 (дата релиза — 30 ноября 2017, активно не поддерживается, важные обновления безопасности скоро перестанут выходить).
Версии 7.1, 7.0 и все версии PHP 5 больше не обновляются. А уже в конце 2020 года самой актуальной станет версия 8.0.
А что насчёт PHP 6? Если вы не знаете, почему шестые версии здесь не упоминаются, то сейчас поясним.
PHP 6: строили, строили, но не построили
На разработку версии 6.0 было потрачено немало времени. Предполагалось, что самым важным нововведением в ней станет поддержка символов Юникода, благодаря которой возможности языка были бы расширены. Однако разработчики PHP 6 столкнулись со множеством трудностей, что вынудило их постепенно отказаться сначала от внедрения Юникода, а затем и вообще от запуска версии 6.0.
Пока шла работа над PHP 6, на эту тему было выпущено немало статей и книг. И представление о PHP 6 как о версиях языка с внедрённым Юникодом уже успело устояться в IT-сообществе. Поэтому новому поколению языка, пришедшему на смену PHP 5, было решено присвоить номер 7.
PHP 7: обновление, которое ждали больше 10 лет
Первая версия PHP 7 была представлена ещё в конце 2015 года, но до сих пор почти половина сайтов в мире, по информации WTechs, не перешли на PHP 7 и остаются на PHP 5. Каких возможностей лишены те, кто всё ещё не обновился?
С заботой о пользователях мобильных гаджетов разработчики также поработали над исполнением движка и уменьшили потребление памяти при работе PHP. Также с помощью Abstract syntax tree (AST) операционный код стал более производительным. И в целом код на PHP 7 стал чище, понятнее и удобнее.
Помимо внедрения нововведений, в версии 7.0 изменили или вовсе убрали устаревшую и ненужную функциональность. С одной стороны, это несколько нарушило совместимость языка с ранее созданным и необновлённым ПО. Но с другой, принятые меры позволили сделать настоящий прорыв в развитии PHP.
PHP 8: взгляд в будущее
Версия 8.0 активно разрабатывается в данный момент, но о ней уже кое-что известно. Планируется, что в новейших версиях PHP будет генерироваться меньше кода. Для этого будет использоваться технология JIT (Just in Time). С её помощью при выполнении приложения весь код будет не компилироваться заново, а частично заимствоваться из уже скомпилированных версий.
Компиляции станет меньше и благодаря технологии FFI (Foreign Function Interface), которая упрощает вызов функций, написанных на разных компилируемых языках программирования. Благодаря JIT и FFI производительность PHP 8 должна ощутимо повыситься по сравнению с PHP 7.
Релиз первой альфа-версии 8.0 намечен на лето этого года. Затем традиционно будут представлены несколько альфа- и бета-версий, а также релизов-кандидатов, после чего 3 декабря 2020 года ожидается выпуск финального варианта.
Кратко об обновлении PHP
Какую версию PHP лучше всего использовать? Конечно же, самую актуальную на данный момент. Тогда вы всегда будете получать:
О работе с PHP на VPS мы пока говорить не будем, так как для этого нужен отдельный материал. Поэтому дальше мы дадим рекомендации пользователям виртуального и специализированного хостинга.
Узнайте, какая версия PHP используется на вашем сайте. Эта информация доступна в настройках веб-сервера: например, на хостинге «Джино» они расположены здесь). Владельцы сайтов на WordPress могут увидеть текущую версию PHP в панели администратора, в разделе Инструменты / Здоровье сайта / Информация. Также вы можете написать этот скрипт, разместить его в файлах сайта и обратиться к нему из браузера:
В результате будет показана информация о версии.
Если ваша текущая версия PHP не входит в число поддерживаемых, взвесьте все «за» и «против» перед обновлением. Ведь чем старее скрипты вашего сайта, тем сложнее может быть перейти на поддерживаемую версию PHP. Тем, кто готов обновиться, нужно сделать следующее:
Убедитесь, что у вас сохранена свежая резервная копия файлов сайта.
Проверьте совместимость используемого ПО, фреймворков, библиотек, плагинов с выбранной вами версией PHP. Если что-то из этого не совместимо с ней, убирайте и заменяйте на более современные аналоги.
Измените версию PHP на хостинге, через настройки сервера в контрольной панели или через запрос в техподдержку.
После обновления протестируйте все функции сайта, при тестировании проверяйте лог на предмет «Fatal error» и других ошибок, которых раньше не было. Если все функции работают, а на страницах сайта появляются предупреждения PHP — отключите отображение ошибок.
Если после обновления возникли серьёзные нарушения в работе сайта, верните старую версию PHP. Разберитесь в проблемах сами или обратитесь за помощью к специалистам.
Чтобы переход на новую версию PHP никогда не составлял большого труда, постоянно адаптируйте свой сайт под последнюю поддерживаемую версию языка. А также используйте регулярно обновляемые плагины и ПО, избавляясь от всего, что не обновлялось больше года и не подлежит использованию с актуальными версиями PHP.
Актуален ли PHP в 2021 году?
Фокус внимания давно переместился с PHP на JavaScript и Python. Тем не менее у него выходят новые версии, а тесты производительности говорят о неплохом прогрессе. Насколько актуален PHP сегодня? Под катом — размышления разработчика, который продолжает отдавать ему предпочтение.
Краткая история PHP
PHP разработал Расмус Лердорф в 1994 году. Лердорф создал набор скриптов, которые отслеживали посещения его онлайн-резюме, и назвал их Personal Home Page Tools («инструменты личной домашней страницы»). Со временем название превратилось в PHP Tools. Он пополнял этот набор новыми инструментами, а потом решил переписать их: добавил взаимодействие с базами данных и многое другое. Так набор превратился во фреймворк.
Дальше эти инструменты продолжали эволюционировать в еще более сложные примитивы, а после публикации кода в open source в 1995 году число пользователей стало расти заметно быстрее. Если вас интересуют подробности этой истории, вы можете найти их на официальном сайте PHP.
Последняя версия языка сейчас — PHP 8.0.
А что не так с PHP?
Уже долгие годы этот язык — мишень для критики. Люди справедливо упрекают его за проблемы в работе, особенно старые версии. Лердорф разрабатывал PHP как язык шаблонизации, а не как полнофункциональный язык программирования. Поэтому у него есть ряд недостатков, которые сильно усложняют поддержку и разработку крупных приложений.
Слабая типизация
Лично мне в этом языке не нравится слабая типизация, позволяющая сочетать разные типы и выполнять их неявные преобразования. Рассмотрим такой пример:
Результатом этих операций будет число 4, то есть в контексте оператора сложения язык преобразует числа в строке в целочисленные значения. В некоторых случаях это может оказаться желательным или позволит сэкономить пару строк кода, но чем больше становится проект, тем сложнее будет поддержка.
В поздних версиях языка начали появляться предупреждения о подобных странных и недопустимых операциях, то есть они признаны устаревшими или скоро ими станут.
Отсутствие пространств имен
Поддержка пространств имен была добавлена в PHP в версии 5.3. В более старых проектах приходилось создавать собственные типы пространств имен, в основном при помощи добавления пространств имен к названиям классов и методов. Из-за этого приходилось использовать повсюду абсурдно длинные имена.
В более поздних версиях языка таких проблем нет.
Противоречивые функции стандартной библиотеки
Не буду говорить, что стандартная библиотека языка плоха, но она могла бы быть и получше. Язык довольно сильно совершенствуется, однако первым версиям стандартной библиотеки, на которые до сих пор ссылаются и поддерживают для обратной совместимости, не хватает целостности. Хоть это и небольшая проблема, она означает, что многие функции стандартной библиотеки имеют разные правила наименования, имена и порядок аргументов. Все это усложняет выявление их значений по умолчанию и поведение.
Вот некоторые примеры противоречивости наименований в строковых методах из документации:
Суперглобальные переменные
И что хорошего в PHP?
Язык на многих произвел плохое впечатление, но за последние годы он сильно улучшился. Благодаря релизу PHP 7 язык модернизировался, в его основе появилось множество приятных особенностей, повысились скорость работы и удобство пользования.
Type hints
Это один из моих любимых способов модернизации старого кода на PHP: использование необязательных type hints, выполняющих преобразование типов, а также обеспечивающих документацию кода. Рассмотрим простую функцию:
Если добавить type hints, код станет таким:
Просто увидев сигнатуру функции, мы понимаем, что она ожидает строковое значение и вернет булев-результат. Можно добавить, что здесь полезно было бы применить правильное наименование, однако эти type hints гарантируют, что значения будут именно указанных типов и предоставляют IDE возможность автодополнения и статического анализа с предупреждениями и другими полезными вещами.
С версии 7.4 PHP позволяет задавать и типизированные свойства для классов:
Это означает, что у объектов Person будут строковые имя и фамилия, возраст в integer и допускающая пустое значение строка для должности. Чем больше классов — тем полезнее эта возможность.
Улучшения синтаксиса
В поздних версиях PHP появилось много синтаксических улучшений:
именованные аргументы: array_fill(start_index: 0, num: 100, value: 50);
разделитель числовых литералов: 299_792_458
Помимо синтаксических он содержит возможности для комплексных улучшений.
Constructor promotion
Взгляните на класс Person :
Вместо этого избыточно многословного кода PHP 8 поддерживает возможность написания такого кода:
Nullsafe-оператор
Этот оператор существовал в некоторых других языках наподобие JavaScript, но PHP его не поддерживал. Взгляните на код, который я взял из документации PHP:
Именно так писали логику в старых версиях PHP для учета проверок на null. Новый nullsafe-оператор позволяет свести это к такому коду:
Разве не великолепно?
Объединенные типы
Хоть для меня это и не самая любимая штука, она все равно ценна в случаях, когда уже есть несколько возможных типов без type hints. Объединения позволяют определять в качестве вариантов несколько типов значений. Благодаря объединениям становится работающим вот такой код:
Обычно наличие нескольких возвращаемых типов сигнализирует о возможности улучшения кода, однако предыдущие версии PHP вообще не позволяли задавать в таких случаях типы, поэтому это все равно усовершенствование.
Производительность
У меня нет четких данных для сопоставления производительности с другими языками, но по сравнению с предыдущими версиями скорость работы кода PHP заметно выросла. В дополнение к рывку, сделанному PHP 7 по сравнению с PHP 5.6, все последующие релизы вносили улучшения, и эта тенденция продолжается. Проведенные Phoronix бенчмарки демонстрируют, что последняя версия PHP 8 в три с лишним раза быстрее PHP 5.6. В посте по ссылке выше есть подробные тесты, так что их стоит изучить.
В дополнение к этим бенчмаркам Kinsta также провела реальные испытания с WordPress. Вот результат для WordPress 5.3.
Точные цифры замеров таковы:
Результаты бенчмарка WordPress 5.3 с PHP 5.6: 97,71 запросов/с
Результаты бенчмарка WordPress 5.3 с PHP 7.0: 256,81 запросов/с
Результаты бенчмарка WordPress 5.3 с PHP 7.1: 256,99 запросов/с
Результаты бенчмарка WordPress 5.3 с PHP 7.2: 273,07 запросов/с
Результаты бенчмарка WordPress 5.3 с PHP 7.3: 305,59 запросов/с
Результаты бенчмарка WordPress 5.3 с PHP 7.4: 313,42 запросов/с
Пока в эти бенчмарки не включен PHP 8, однако видно, что даже версия 7.4 способна обрабатывать в три раза больше запросов по сравнению с 5.6, и это серьезное улучшение.
Вывод
В целом PHP за последние годы значительно улучшили, и с ним стало удобно работать. Я профессионально пишу на Golang, PHP и Python, но больше всего опыта у меня в PHP, поэтому я могу быть пристрастен. Однако, по моему мнению, PHP нашел идеальный баланс между гибкостью и поддерживаемостью.
В нем есть необходимые инструменты для реализации безумных вещей, гибкая система типов, позволяющая постепенно улучшать легаси-код, он достаточно быстр для большинства применений, его продолжают совершенствовать, а еще у него потрясающее сообщество open source.
Тем, кто разочаровался в PHP при работе с более старыми версиями, я рекомендую дать этому языку еще один шанс. Возможно, он вам все равно не понравится, но я считаю, что многие изменят свое мнение, беспристрастно взглянув на новую версию.