PHP 8.2 – Какво ново да очакваме в света на PHP?
PHP е един от езиците, които често поражда дълги дискусии сред софтуерните инженери (също наричани програмисти). Независимо от някои по-крайни мнения, PHP остава един от най-популярните езици за програмиране, както и един от най-поддържаните.
Ново
Read-only класове
След PHP 8.1 вече може да използваме ключовата дума readonly, която не позволява полетата в класове да бъдат модифицирани.
От версия 8.2 ключовата дума може да бъда ползвана върху класове, която автоматично ще маркира всички полета readonly. По този начин може да се създават непроменяеми обекти, като избегнем ненужното повтаряне на ключовата дума readonly.
Използване на null, false, и true като самостоятелни типове
От версия 8.2 вече може вместо bool да се използват още по-ограничаващщите типове true и false. С тях може да обознаите функция, която винаги ще връща true или false.
Това е чудесно, но защо би ни потрябвало нещо толкова изрично ясно писане на тип, който може да отговаря само на една единствена стойност. Когато създаваме API на ниво библиотека и попаднем на ситуация, в която някоя функция от онаследяващ клас да трябва задължително да връща false, ние може да я означим с тип false, който е съвместим с bool.
В следния пример се вижда съвместимостта на false и true с bool (в посока от по-общ към по-конкретен):
// PHP 8.2
<?php
abstract class GameObject {
abstract function hasArea(): bool;
}
class Sphere extends GameObject {
function hasArea(): true {
return true;
}
}
class Point extends GameObject {
function hasArea(): false {
return false;
}
}
Аналогично се използва null като тип.
Друга причина, довела до това нововъведение, са миксираните типове, които една функция може да върне. В света на WordPress (и в света на PHP изобщо) съществуват функции, които връщат резултат от определен клас или, ако функцията не премине успешно. В този случай вместо общият тип bool (който съдържа цели 2 различни стойности) може да се използва ReturnClass | false.
Ново допълнение към „Random“
В новата версия на PHP 8.2 е добавен класът Random\Randomizer. С него може по асбтрактен начин да се използват различни Random\Engine имплементации.
Константи в traits
Traits е механизъм в PHP да се преизползва код, който не участва в йерархия. Те могат да се „закачат“ към други типове и да добавят функционалности. От PHP 8.2 вече могат да се добавят константи към traits.
Функции, които ще бъдат премахнати
*Източник: PHP 8.2 Release Announcement