Содержание

Что нового в PHP 8, сравнение с PHP 7

PHP 8 стал еще более быстрым и надежным. По сравнению с версией PHP 7 появилось множество новых и полезных вещей, которые обязательно будут востребованы пользователями. Рассмотрим подробнее эти нововведения.

Типы Union 2.0 (Объединенные типы)

Существует множество случаев, когда использование типов объединения может быть полезным. Вместо аннотаций PHPDoc для объединенных типов теперь вы можете использовать объявления union type, которые проверяются сразу во время выполнения.

Union Types — это совокупность двух или более типов, которые указывают, что вы можете использовать любой из них.

JIT – компилятор

JIT (Just In Time — «в нужный момент») — это динамическая компиляция байт кода в машинный. JIT компилятор значительно улучшает производительность работы программ. Проверка на синтетических бенчмарках показывает улучшение производительности примерно в 3 раза и в 1,5–2 раза для некоторых долго работающих приложений.  

В JIT код переводится сначала в промежуточное представление и только потом в машинный код. То есть, выполняется непосредственно на процессоре, а не на виртуальной машине Zend VM.

JIT реализован как независимая часть OPcache. Его можно включать / отключать во время компиляции или выполнения скрипта.

Использование ::class для объектов

В PHP 8 теперь вы можете использовать ::class для объектов вместо того, чтобы использовать get_class() как раньше. Работает точно так же, как и get_class().

Атрибуты

В PHP 8 теперь вместо аннотаций PHPDoc вы можете использовать структурные метаданные с нативным синтаксисом PHP.

Выражение Match

В PHP 8 новое выражение match похоже на оператор switch, но имеет свои особенности:

  • Match — это выражение и его результат может быть сохранён в переменной или возвращён.
  • Условия match поддерживают только однострочные выражения, для которых не требуется управляющая конструкция break;
  • Выражение match использует строгое сравнение.
Оператор Nullsafe

В PHP 8 теперь вместо проверки на null вы можете использовать последовательность вызовов с новым оператором Nullsafe. Если один из элементов в последовательности возвращает null, то выполнение прерывается и вся последовательность возвращает null.

Улучшенное сравнение строк и чисел

Теперь при сравнении с числовой строкой PHP 8 использует сравнение чисел. В противном случае число преобразуется в строку и используется сравнение строк.

Ошибки согласованности типов для встроенных функций

В PHP 8 большинство внутренних функций теперь выбрасывают исключение Error, если при проверке параметра возникает ошибка.

Именованные аргументы

В PHP 8 теперь можно:

  • Указывать только необходимые параметры и пропускать необязательные.
  • Порядок аргументов не важен, аргументы самодокументируемы.
Объявление свойств в конструкторе

В новой версии PHP 8 теперь используется гораздо меньше шаблонного кода для определения и инициализации свойств.

Новый тип возврата static

Ранее в PHP уже были возвращаемые типы — self и parent, но static не был допустимым типом возврата для этого языка программирования. Теперь есть.

Throw-выражения

В PHP оператор throw не может создавать исключения там, где были разрешены только выражения, например стрелочные функции, оператор объединения и тернарный оператор.

В новом PHP 8 теперь вы можете преобразовывать инструкцию throw в выражение.

Weak maps

Weak maps — это набор объектов, на которые в коде слабо ссылаются ключи, что может привести к их удалению сборщиками мусора. В PHP 8 добавлен класс WeakMaps для создания сохранения ссылки на объект. При этом она не препятствует удалению самого объекта.

Завершающая запятая в списках параметров

Ранее при вызове функции в списках параметров отсутствовала поддержка запятой. В PHP 8 теперь это разрешено.

Новый Stringable интерфейс

В PHP 8 теперь вы можете использовать интерфейс Stringable для аннотации типов или имплементации метода __toString (). И больше нет необходимости реализовывать его вручную.

Новые функции в PHP 8
  1. get_debug_type() — возвращает тип переменной. В отличии от gettype() возвращает более полезный вывод для массивов, строк, анонимных классов и объектов.
  1. str_starts_with() — проверяет, начинается ли строка с определенной строки. Возвращает TRUE / FALSE.
  1. str_ends_with() — проверяет, заканчивается ли строка с определенной строки. Возвращает TRUE / FALSE.
  1. str_contains() — проверяет, содержит ли строка другую строку.
  1. fdiv() — эта функция похожа на fmod() и intdiv(), что позволяет делить на 0. Но вместо ошибок получаем INF, -INF или NAN, в зависимости от случая.

6. get_resource_id() — ранее ресурсам присваивается идентификатор, но для этого необходимо было преобразование ресурса в int. В PHP 8 добавлена функция get_resource_id(), что делает эту операцию более очевидной и безопасной для типов.

К сожалению многие CMS пока не поддерживают PHP 8, в частности и 1С-Битрикс. В любом случае поддержка PHP 8 скоро появится на всех тарифах нашего хостинга.

Подробнее ознакомиться с нововведениями можно на официальной странице проекта.

 

Как установить PHP 7 на CentOS 7

Попробуйте свежую версию PHP 7 — она подойдёт для ОС семейства Linux. В статье мы поможем разобраться, что к чему: расскажем о новой версии PHP — её плюсах и минусах, покажем, как обновить PHP на Centos 7 и как проходит установка PHP 7 Centos.

PHP (Hypertext Preprocessor) — это серверный язык программирования, который создали специально для веб-разработки (сайтов, веб-приложений и других проектов). Его главное преимущество перед другими языками — возможность внедрить PHP-код непосредственно в HTML.

Чтобы повысить производительность и сократить потребление памяти, код ранних версий PHP регулярно перерабатывается. На сегодняшний день самая свежая версия — PHP 7. Если вы хотите установить PHP 7, стоит учитывать особенности новой версии.

Плюсы установки PHP 7

  • Производительность может увеличиться от 30 до 70%: это зависит от вашего проекта и дополнительных требований к нему,
  • кроссплатформенность: сайты и приложения можно создавать как на операционных системах Windows и MacOS, так и на Linux-сервере,
  • PHP 7 поддерживают популярные CMS: WordPress, Zend, Yii, Symfony и другие.

Минусы установки PHP 7

  • Нужна донастройка или переустановка PHP MySQL,
  • из языка удалили расширения: interbase, pdo_dblib, sybase_ct, oci8, pdo_oci,
  • теперь нельзя работать с тегами:
  • непривычный синтаксис работы с возвращаемыми методами данных.

Ниже рассмотрим, как обновить версию PHP до самой актуальной и как установить PHP 7 на CentOS 7 с нуля.

В руководстве ниже мы покажем, как установить PHP из репозитория Remi.

  1. 1.

    Перед установкой репозитория Remi добавьте репозиторий Epel:

    yum install epel-release
  2. 2.

    Теперь добавьте репозиторий Remi командой:

    rpm -Uvh http://rpms.remirepo.net/enterprise/remi-release-7.rpm

    Чтобы посмотреть доступные к установке репозитории, введите:

    ls /etc/yum.repos.d/remi*

    Вывод: Centos настройки PHP

  3. 3.

    Установите репозиторий из webtatic.com:

    rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
  4. 4.

    Если на вашем компьютере уже есть старая версия PHP, сделайте обновление версии командой:

    sudo yum update

    Если вы устанавливаете PHP впервые, добавьте пакеты:

    yum install php php-mcrypt php-cli php-gd php-curl php-mysql php-ldap php-zip php-fileinfo

    Затем установите версию PHP 7:

    yum install php74

    Где 74 — версия PHP.

  5. 5.

    Проверьте установку командой:

    php74 -v

    Вывод: Centos install PHP 7

  6. 6.

    Если вы планируете использовать сетевой сокет Nginx, введите:

    sudo systemctl restart php-fpm

    Если вы используете файловый сокет Nginx, пропишите актуальный путь к новому сокету. Если вы планируете работать с HTTPD Apache, дополнительных настроек не требуется.

Готово, вы установили PHP 7 на Centos 7 по инструкции.

Помогла ли вам статья?

Да

раз уже
помогла

PHP 7: 10 вещей, которые вам нужно знать

Вы веб-разработчик или владелец веб-сайта? Ваши сайты работают на CMS с поддержкой PHP, таких как WordPress, Drupal, Joomla или Magento? Тогда у меня для вас хорошие новости: недавно была выпущена полная бета-версия нового PHP 7 . Основной выпуск 7.0.0 содержит так много интересных функций, что мы решили посвятить им целый пост. Но сначала нам нужно добавить несколько напоминаний.

Обратите внимание, что PHP 7 все еще находится в стадии разработки, поэтому не используйте его в производстве до ноября, когда будет выпущена окончательная версия . Если вы, как будущий пользователь, хотите принять участие в процессе разработки, вы можете помочь загрузить последнюю бета-версию, поэкспериментировать с ней в среде тестирования и сообщить об ошибках, обнаруженных во время тестирования. Чтобы узнать, когда выйдет следующая бета-версия, вот расписание проекта.

После этого давайте проверим PHP 7.

1. Имя PHP 7 (не 6)

Текущая стабильная версия использует номер версии PHP 5.6. После некоторого спора команда разработчиков решила, что не будет использовать название PHP 6 для следующего основного выпуска. PHP 6 уже существовал в прошлом как экспериментальный проект, но так и не достиг фазы производства.

Чтобы пользователи не перепутали предыдущую попытку с последней разработкой, новый основной выпуск будет работать под названием PHP 7.

ИЗОБРАЖЕНИЕ: Время разработки программного обеспечения
2. Совершенно новый Zend Engine

Движок Zend используется в PHP с 1999 года, когда он был представлен в новой на тот момент версии PHP 4. Zend — не путать с Zend Framework — это механизм выполнения с открытым исходным кодом, написанный на C, который интерпретирует язык PHP. Текущая серия PHP 5.X использует Zend Engine II , который расширил функциональность исходного движка и добавил к языку расширяемую объектную модель и значительное улучшение производительности .

PHP 7 получает совершенно новую версию движка под кодовым названием PHP#NG (Next Generation).

ИЗОБРАЖЕНИЕ: Доклад на ZendCon-2014
3. Вдвое больше скорости

Наиболее заметным преимуществом нового движка PHPNG является значительное улучшение производительности. Команда разработчиков PHPNG провела рефакторинг Zend Engine и существенно оптимизировала использование памяти.

Результаты? Вы можете увидеть тесты производительности, предоставленные Zend Performance Team ниже. При использовании PHP 7 не только ваш код будет выполняться быстрее , но и вам потребуется меньше серверов для обслуживания того же количества пользователей .

ИЗОБРАЖЕНИЕ: Zend.com
4. Облегчает обработку ошибок

Мягко говоря, обработка фатальных и перехватываемых фатальных ошибок никогда не была легкой задачей для программистов PHP. Новый Engine Exceptions позволит вам заменить подобные ошибки исключениями. Если исключение не перехвачено, PHP продолжит возвращать те же фатальные ошибки, что и в текущей серии 5.X.

Новые объекты \EngineException не расширяют \Exception Базовый класс. Это обеспечивает обратную совместимость и приводит к двум различным типам исключений при обработке ошибок: традиционные и исключения механизма .

Чтобы программисты могли перехватывать и то, и другое, PHP 7 вводит новый общий родительский класс под именем \BaseException .

ИЗОБРАЖЕНИЕ: Wiki.PHP.net
5. Поддержка 64-битных систем Windows

PHP является важным членом стека LAMP, что означает, что его родной средой является Linux, но его также можно запустить в системе Windows. Серия 5.X еще не поддерживает 64-битные целые или большие файлы, поэтому до сих пор сборки x64 считались 9.0003 экспериментальный .

PHP 7 изменит это, так как вводит последовательную поддержку 64-битных , что означает, что будут поддерживаться как собственные 64-битные целые числа, так и большие файлы, что позволит вам уверенно запускать язык в вашей 64-битной системе Windows в будущем.

6. Новый космический корабль и оператор объединения нулей

Оператор космического корабля работает под официальным названием Комбинированный оператор сравнения. Обозначение нового оператора выглядит так: <=> (вроде упрощенного космического корабля, если правильно представить).

Оператор корабля возвращает 0, если оба операнда равны, 1, если левый больше, и -1, если правый больше. Он также называется оператором трехстороннего сравнения и уже существует в других популярных языках программирования, таких как Perl и Ruby.

ИЗОБРАЖЕНИЕ: Wiki.PHP.net

Оператор Null Coalescing обозначается двумя вопросительными знаками ( ?? ). Вы можете использовать его, когда хотите проверить, существует ли что-то, и вернуть значение по умолчанию, если это не так. Оператор объединения возвращает результат своего первого операнда, если он существует и не равен нулю, и второй операнд в любых других случаях.

Вот как новый оператор сокращает время, затрачиваемое на базовые объявления:

ИЗОБРАЖЕНИЕ: Wiki.PHP.net
7. Включает точные объявления типов

Вы когда-нибудь хотели предотвратить непреднамеренные возвращаемые значения, объявляя возвращаемый тип функции? Итак, новый PHP 7 позволяет разработчикам повышать качество своего кода с помощью объявлений возвращаемых типов.

На изображении ниже показан очень простой вариант использования, когда функция foo() должна возвращать массив. Ознакомьтесь с более сложными примерами здесь.

ИЗОБРАЖЕНИЕ: Wiki.PHP.net

Чтобы еще больше улучшить эту функцию, PHP 7 вводит 4 объявления новых типов для скалярных типов: int, float, string и bool . Новые скалярные типы позволяют разработчикам указывать, что они ожидают возврата целых чисел, чисел с плавающей запятой, строк или логических значений. Новые скалярные типы, введенные в PHP 7, также будут поддерживаться подсказками типов аргументов, которые позволяют разработчикам принудительно указывать тип параметров, начиная с серии PHP 5.X.

8. Добавляет анонимные классы

PHP 7 позволяет использовать анонимные классы, что уже хорошо зарекомендовало себя в других объектно-ориентированных языках, таких как C# и Java. Анонимный класс — это класс без имени. Объект, который он создает, имеет ту же функциональность, что и объект именованного класса.

Синтаксис такой же, как и в традиционных классах PHP, только отсутствует имя. Если анонимные классы используются правильно, они могут ускорить кодирование, а также время выполнения . Анонимные классы превосходны, когда класс используется только один раз во время выполнения и в тех случаях, когда класс не нужно документировать.

ИЗОБРАЖЕНИЕ: Wiki.PHP.net
9. Облегчает импорт из одного и того же пространства имен

Новая функция объявлений группового использования будет дарована Богом тем из вас, кто хочет импортировать множество классов из одного и того же пространства имен . Новый синтаксис сокращает многословие, делает ваш код более аккуратным и легким для глаз, а также экономит много времени на набор текста.

Также будет легче читать и отлаживать коды, так как объявления группового использования помогают идентифицировать импорты, принадлежащие одному и тому же модулю.

ИЗОБРАЖЕНИЕ: Wiki.PHP.net
10. Очищает комнату

Цель PHP 7 состояла в том, чтобы освободить место для улучшения, поэтому было необходимо избавиться от многих устаревших функций и старых и неподдерживаемых серверных API и расширения. Если вы хотите проверить, какие из них подробно, нажмите здесь и здесь.

Все удаленные элементы уже давно устарели в PHP 5, так что, скорее всего, вы давно ими не пользовались. Однако обратите внимание, если у вас есть устаревшее приложение , работающее на более старых версиях PHP 9.0004 новый PHP 7 может потенциально сломать код .

Функции и улучшения PHP 7

Ура! PHP 7 наконец-то вышел, и чтобы отпраздновать его выпуск, я создал видео, в котором рассказывается о нескольких интересных функциях PHP 7.

Содержание

  • 1 Новые возможности PHP 7: краткий обзор
  • 2 Подсказки скалярных типов
  • 3 Объявления возвращаемых типов
  • 4 Анонимные классы
  • 5 Метод Closure::call()
  • 6 Делегация генератора
  • 7 Выражения возврата генератора
  • 8 Оператор нулевого объединения
  • 9 Оператор космического корабля
  • 10 Throwables
  • 11 Поддержка уровней для функции dirname()
  • 12 Функция деления целых чисел 9 0138
  • 13 Единый синтаксис переменной
  • . Вот список того, чем я занимаюсь:

    • Подсказки скалярного типа
    • Объявления возвращаемых типов
    • Анонимные классы
    • Метод Closure::call()
    • Делегирование генератора
    • Выражения возврата генератора
    • Пустое значение Оператор объединения
    • Оператор космического корабля
    • Метательные предметы
    • Поддержка уровней для функции dirname()
    • Функция деления целых чисел
    • Синтаксис унифицированных переменных

    Подсказки скалярного типа

    Типовые подсказки уже доступны в PHP. К сожалению, они были ограничены классами, массивами и вызываемыми объектами.

    Начиная с PHP 7, скалярные типы (целые числа, числа с плавающей запятой, логические значения и строки) также могут использоваться в качестве подсказок типа.

    Посмотреть код на Gist.

    Я доволен этой функцией PHP 7, потому что она позволяет разработчикам обеспечить лучшую согласованность ввода интерфейса функции/метода. По умолчанию «принудительный режим» включен. Это не позволяет PHP выдавать ошибку типа, когда типы не совсем совпадают, но когда преобразование все еще возможно.

    Если вы включите «строгий режим» (раскомментировав строку 6) , будет выдана ошибка типа, если подписи не совпадают.

    Объявления возвращаемых типов

    В то время как подсказки типов обеспечивают согласованность ввода, объявления возвращаемых типов обеспечивают согласованность вывода.

    Мы используем двоеточие перед открывающей фигурной скобкой функции, чтобы указать тип возвращаемого значения.

    Посмотреть код на Gist.

    Применяются те же правила строгости, что и для подсказок типа: if «строгий режим» отключен, разрешены возвращаемые значения, которые можно преобразовать в предпочтительный тип. Если вы включите «строгий режим», этот код выдаст ошибку типа.

    Анонимные классы

    Анонимные классы полезны для простых одноразовых объектов. С помощью анонимных классов вы можете определить класс и создать встроенный экземпляр объекта.

    Посмотреть код на Gist.

    Метод Closure::call()

    Замыкания — это анонимные функции, которые объявляются встроенными и назначаются переменной. Его можно использовать в качестве обратного вызова для последующего выполнения. В PHP 5 уже можно было привязать объект к области замыкания, как если бы это был метод.

    Метод «вызов» — это одна из функций PHP 7, которая была введена для упрощения процесса.

    Посмотреть код на Gist.

    Делегация генератора

    Генераторы — это круто, но иногда их трудно объяснить. Как ни странно, использовать их на удивление просто. Все дело в ключевом слове «доходность». Используя «выход», генератор возвращает полученное значение. Генератор реализует итератор, который упрощает использование в , в то время как или для петель.

    В PHP 7 было введено делегирование генератора. Это означает, что можно обратиться к генератору из другой функции.

    Посмотреть код на Gist.

    Выражения возврата генератора

    Как уже упоминалось: с помощью ключевого слова yield значения могут быть возвращены, а итератор перегружен. Но возвращаемые значения игнорируются генераторами.

    В PHP 7 метод «getReturn» был добавлен в класс Generator, чтобы разрешать возвращаемые значения в генераторах.

    Посмотреть код в Gist.

    Оператор слияния с нулевым значением

    Оператор слияния с нулевым значением – это сокращение для проверки установленного значения, а не нулевого, в рамках встроенных сравнений. Вместо того, чтобы снова и снова выполнять одну и ту же проверку «isset» , просто используйте «??» , чтобы вернуть значение, если оно установлено (а не ноль), или альтернативное значение.

    Посмотреть код на Gist.

    Оператор космического корабля

    Так называемый «Оператор космического корабля» упрощает сравнение значений. Вместо типичного значения true/false оператор космического корабля возвращает одно из следующих значений на основе результата оценки: значение меньше правого значения

  • 1 если левое значение больше правого значения

Просмотрите код в Gist.

Throwables

Большое изменение в PHP 7 заключается в том, что ошибки больше не вызываются так, как раньше. Ошибки теперь ведут себя аналогично исключениям. Оба они наследуются от интерфейса Throwable.

Это означает, что ошибки теперь можно перехватывать в блоке try/catch . Вы можете перехватывать как исключения, так и ошибки как Throwables, но вы также можете перехватывать ошибки как объекты Error.

Существуют различные виды ошибок, которые мы можем поймать:

  • ArithmeticError
  • AssertionError
  • DivisionByZeroError
  • ParseError
  • TypeError

Посмотреть код на Gist.

Это также нарушение обратной совместимости , поскольку пользовательские обработчики ошибок могут не запускаться. Если у вас есть ошибка синтаксического анализа в функции eval, она выдаст ошибку ParseError, а не просто вернет false. Осторожно!

Уровень поддержки функции dirname()

Функция dirname используется чаще, чем вы думаете. Это идеальная функция для ссылки на каталоги относительным образом.

Но когда вы хотите подняться на пару уровней выше, вы в конечном итоге вкладываете вызовы dirname, что в конечном итоге приводит к путанице.

Начиная с PHP 7 функция dirname имеет второй аргумент, который указывает, на сколько уровней вы поднимаетесь по дереву каталогов. Если вы не введете значение, по умолчанию будет 1.

Посмотреть код на Gist.

Функция целочисленного деления

Возможно, это не самая важная функция PHP 7, но все же стоит упомянуть: функция intdiv возвращает целочисленное значение деления, тогда как обычные деления могут привести к возвращению числа с плавающей запятой.

Посмотреть код на Gist.

Унифицированный синтаксис переменных

В PHP 7 появился «унифицированный синтаксис переменных». Этот стандарт изменяет способ оценки косвенного доступа к ключам, свойствам и методам массива. Интерпретация PHP 7 обеспечивает строгую оценку слева направо.

Это также считается нарушением обратной совместимости. Если вы хотите, чтобы ваш код работал на PHP 7, рекомендуется изменить код и использовать фигурные скобки, чтобы обеспечить соблюдение порядка оценки.

Производительность

Не забываем упомянуть, что производительность PHP 7 должна быть впечатляющей. Некоторые говорят, что он в два раза быстрее, чем PHP 5(.6), другие используют еще более впечатляющие цифры. Я уверен, что он отлично работает, и мне любопытно увидеть средние цифры, когда люди начнут его использовать.

Некоторые источники говорят, что он даже превосходит HHVM. Но не забывайте слова ложь, наглая ложь и статистика.

Я взволнован, посмотрим.

Мы готовы к PHP 7

В Combell, хостинговой компании, в которой я работаю, мы некоторое время тестировали PHP 7. Мы большие поклонники возможностей PHP 7. Мы уже сделали PHP 7.0.0 RC8 доступным в нашей панели управления, и теперь мы предлагаем PHP 7.0.x на виртуальном хостинге.