PHP 8. Какво е важно да знаем?

Новата версия на популярния програмен език – PHP 8, излиза на 26 ноември 2020 г., като със себе си носи много нови функции и подобрения в производителността. Сред основните нововъведения са JIT компилаторът, union типовете, допълнителни атрибути… За тях и всичко друго важно, което си струва да знаете за PHP 8, ще поговорим на следващите редове.

Една версия на PHP се поддържа активно около две години. Когато те изтекат, следват още година-две поддръжка на сигурността, като ъпдейти се пускат само при критични проблеми. Междувременно обикновено вече е излязла следваща версия. Към този момент (ноември 2020 г.) активно се поддържат версии 7.2, 7.3 и 7.4, като във версия 7.2 се обръща внимание само на критични проблеми със сигурността, а версия 7.3 предстои да влезе в същата фаза от 6 декември 2020 г. Винаги можете да следите поддържаните към момента версии на официалния сайт на PHP.

Новината за версия 8 обикаля мрежата от доста време. Милионите потребители с нетърпение очакват официалната дата на пускането му: 3 декември 2020 г. Дотогава остава по-малко от месец, затова е важно да знаем какво да очакваме. Ето някои от акцентите. 

JIT Compiler

Безспорно най-очакваният от разработчиците ъпгрейд е JIT компилаторът. Механизмът, достъпен за тестване още от PHP 7.4, вече официално е част от PHP 8.

Идеята за внедряване на JIT се появява още при PHP 7, а Дмитрий Стогов стартира този проект в далечната 2011 година. Оттогава той и други водещи разработчици на 3 пъти се опитват да внедрят технологията. JIT отговаря за компилирането на скрипта в машинен код непосредствено преди изпълнението му. Чрез него приложението се изпълнява „в движение“, много по-бързо спрямо досегашния интерпретатор.

JIT постоянно следи кода по време на изпълнението му. Той разбира кои части се изпълняват повторно. Фрагментите, които се ползват най-често, биват компилирани и запаметени като машинен код. В резултат производителността на софтуера се подобрява осезаемо. Компилаторът е внедрен като независима част от OPcache и може да бъде активиран или деактивиран.

Тъй като PHP е интерпретиран език, кодовете му трябва да се „преведат“ на език, който процесорът и другите машини разбират. Ето защо въвеждането на JIT ще даде възможност PHP да навлезе сериозно извън уеб сферата, например в нашумели направления като разработването на изкуствен интелект, Machine Learning или Internet of Things.

OPcache extension

Разширението OPcache повишава производителността на езика. Ако JIT компилира преведения код, то OPcache запазва предварително компилирания код в споделената памет.

Разширението спестява на системата необходимостта да зарежда и анализира скриптове при всяка заявка. То съхранява кешираната версия, подготвена от JIT компилатора.

Процесът на изпълнение в PHP се извършва в следните четири стъпки:

  1. Токенизиране: Интерпретаторът чете PHP кода и разработва селекция от маркери.
  2. Синтактичен анализ: Интерпретаторът преглежда скрипта и гарантира, че той съвпада с маркерите, използвани за създаване на AST (abstract syntax tree). Освен това той проверява и гарантира, че правилата за синтаксис съвпадат.
  3. Компилация: AST се превежда в Zend кодове за ниско ниво. Това създава идентичности, които позволяват на интерпретатора да идентифицира инструкцията Zend VM.
  4. Интерпретация, която позволява Opcodes да бъдат интерпретирани, за да могат да се изпълняват на Zend VM.

Ако активирате OPcache, PHP интерпретаторът минава през целия процес само веднъж. След това компилираната версия се съхранява в споделената памет. При поискване тя може да бъде изпълнена веднага и така се пропускат първите три етапа.

Constructor Property Promotion

Това нововъведение ще осигури на разработчиците актуализиран и по-кратък синтаксис. Той позволява декларирането на class property и constructor assignment директно от конструктора. Актуализацията ще направи процеса на деклариране на properties по-лесен и по-четлив и ще намали опасността от грешки.

Attributes 2.0

Атрибутите или анотациите са структурирани форми на метаданни, които могат да се използват за дефиниране на свойства на различни обекти, елементи и файлове. В момента единственият начин да маркирате атрибути и да декларирате класове или функции в PHP е чрез doc-comments.

Новите атрибути по избор ще бъдат добавяни към code declarations: проверка на класове, функции, константи, методи, параметри. Въпросните тагове се поставят преди декларациите, към които принадлежат. Те могат да бъдат включени преди или след коментар на doc-block.

Union Types 2.0

Чрез Union типовете може да се дефинират набор от типове (два или повече) за входни и/или изходни данни. Досега синтаксисът на езика не даваше подобни възможности. Вариант за заобикаляне на проблема бе да се дефинират типове в анотациите.

В PHP 8 всички Union Types могат да бъдат записани като ? или като null.

Named arguments

Именуваните аргументи ви позволяват да предавате стойности към функция, като указвате името на параметрите, така че да не се налага да вземате под внимание реда им. Можете също да пропускате незадължителните от тях.

И още

Други новости, които си струва да отбележим, са Nullsafe операторът, който вече ще работи при извикване на методи и Match Expression. Редно е да споменем и новата възможност да използваме ::class върху обекти, вместо досегашния вариант с get_class(). В PHP 8 ще видим също доста нови функции като fdiv(), get_debug_type(), get_resource_id(), str_contains(), str_starts_with() и str_ends_with().

Операторът @ вече не заглушава фатални грешки

Възможно е тази промяна да покаже грешки, които досега са оставали скрити. Ако не сте задали display_errors = Off на вашите производствени сървъри, по-добре го направете. Немалко грешки, които досега задействаха само предупреждения или известия, вече са преобразувани в подходящ формат. Полезен списък на промените можете да намерите тук. 

В заключение

Ако все още се колебаете дали да преминете към PHP 8, имайте предвид следното:

  • По-новите версии на PHP обикновено са по-сигурни, имат по-малко грешки и изпълняват скриптовете по-бързо.
  • Ако даден сайт е създаден с PHP и кодът е съвместим с най-новата версия на езика, той ще функционира по същия начин или по-добре. Ако използвате WordPress или аналогичен CMS и го актуализирате, вероятно ще забележите подобрения в производителността.
  • В случай, че кодът ви е остарял и не се поддържа от новата версия на PHP, сайтът ви ще дава грешки, а може дори напълно да спре да работи! Ето защо първо внимателно проверете съвместимостта.

 

Вашият коментар

Вашият имейл адрес няма да бъде публикуван. Задължителните полета са отбелязани с *