Най-новата основна версия на PHP 8.0 се поддържа на всички сървъри при СуперХостинг.БГ.
Версия 8.0 е основна версия на PHP езика. PHP е скриптовият език, на който е написан WordPress (най-известната CMS платформа).
Основните версии на PHP са малко по-интересни от минорните, защото в тях се добавят големи и дългоочаквани новости, правят се съществени подобрения и се премахват deprecated (остарели) функции.
Така например в предишната основна версия на PHP 7.0 беше обновен PHP двигателят Zend Engine с нова и по-бърза версия 3. Това беше стратегическа новост, която отвори възможности за следващи подобрения по езика.
Сега в PHP 8.0 можем да видим една голяма добавка, която също можем да приемем за стратегическа новост – JIT (Just In Time) компилатор. Освен него, в новата версия има много подобрения по езика, производителността и сигурността му.
JIT компилатор
PHP е скриптов език, който се интерпретира. Това означава, че за да „работи“ PHP приложението, изходният код се „превежда“ от PHP интерпретатора (Zend VM) до байткод, а след това – до четим от процесора машинен код.
Това превръщане на PHP кода до машинен код се извършва от PHP интерпретатора при всяко изпълнение на даден скрипт. За разлика от програмните езици като C например, при които кодът на приложението е предварително компилиран до изпълним файл, съдържащ машинен код, например Windows .exe файловете.
Just In Time („точно навреме“) компилаторът превежда междинния (байткод) до машинен код. JIT е имплементиран като част от OPCache. За да може да се използва JIT, е нужно OPCache да е активиран. Машинният код се кешира от OPCache и може директно да се подава и изпълнява от процесора. Това изключва нуждата от предварителната интерпретация на кода от PHP интерпретатора и се отразява в подобрена скорост на изчислителните задачи. Това подобрение ще се отрази на всякакви функции, които извършват изчислителни задачи.
Голямото ускорение в изпълнението на кода е страхотно от гледна точка на производителността на PHP. Но има едно НО. В масовите уеб приложения като WordPress много малка част от кода се използва за изчисления. Скриптовете на тези приложения предимно се занимават не с изчислителни, а с входно/изходни задачи (IO) – обработка на HTTP заявки, изчакване на отговор от базата данни, четене от други файлове и други. Поради това към момента ползите от JIT в масовите уеб приложения няма да са силно осезаеми. Което означава, че няма да видим ускорено зареждане на уебсайтовете само заради JIT.
От тестовете на производителността на PHP 8.0 се установява, че за обичайните уеб приложения, тя е еднаква с тази с PHP 7.4.
Примерно ускорение от JIT при изчислителни функции може да се види в следното клипче на Зеев Сураски (Zeev+Andi=Zend): https://youtu.be/dWH65pmnsrI
Въпреки че за момента JIT няма да облагодетелства осезаемо уеб приложенията като WordPress, той може да се приеме за стратегическата новост в езика. С нея се отварят възможности пред PHP, например за използването му в области, в които се изискват комплексни изчисления като машинното самообучение и големите данни.
Именувани аргументи
В PHP 8 аргументите на функциите могат да се подават, като се именува на кой аргумент каква стойност се подава.
Така може да се пропускат незадължителни параметри и да се прескача редът на подаване на параметрите.
Пример
Преди:
htmlspecialchars($string, ENT_COMPAT | ENT_HTML401, 'UTF-8', false);
Сега:
htmlspecialchars($string, double_encode: false);
В случая във втората функция са подадени първият и четвъртият параметър, като са пропуснати двата параметъра по средата: $flags и $encoding.
Извикването на параметър по име позволява те да не се подават в реда, в който са дефинирани.
И още
Атрибути
Вместо досегашните анотации с PHPDoc, сега атрибутите може да се използват в кода за съхранение и използване на структурирани данни.
Атрибутите се прилагат към класове, методи на класове, функции, параметри и константи.
Данните, записани като атрибут, могат да се четат runtime с Reflection API-то на PHP.
Constructor property promotion
В новото PHP е направено улеснение, с което се пише по-малко код за дефиниране на property-тата на класа. Те могат да се декларират само един път в конструктора на класа:
Пример:
class Point {
public function __construct(
public float $x = 0.0,
public float $y = 0.0,
public float $z = 0.0,
) {}
}
Това улеснение цели програмистите да пишат по-малко код и да инициализират своите променливо по-лесно.
Nullsafe operator
В PHP 7 бе въведен nullsafe оператор с улеснен синтаксис за управление на null стойностите.
Пример:
$а = $array['data']??'';
Този съкратен запис е удобен при ситуации, когато дадена променлива не е дефинирана или стойността ѝ е null.
В PHP 8 тази възможност е добавена и за характеристиките на даден клас.
Пример:
$country = $session?->user?->getAddress()?->country;
Този синтаксис спестява доста проверки с if, улеснява писането на код и цели да минимизира грешките при работа на приложението.
WordPress и PHP 8
Въпреки че ядрото на WordPress от версия 5.6 е съвместимо с новата версия на PHP 8.0, това все още не може да се каже за всички съществуващи плъгини и теми.
Ако в сайта си използвате тема или плъгини, които не са обявили изрично, че поддържат PHP 8.0, тогава не е препоръчително да го активирате.
Експерименти със сайта можете да правите на отделно негово копие (тестово копие). Ако решите да опитате с новата версия на PHP, нека е на тестовото копие.
Абонирайте се за СуперБлога, за да научавате първи най-важното и полезното от света на уеб, касаещо Вашия сайт и дигитално развитие.