PHP узоқ вақт “эски тил” деган тамға билан яшади. Аммо 2020-йил ноябрда чиққан PHP 8.0 ва ундан кейинги версиялар тилни тубдан ўзгартирди: типлар қатъийлашди, синтаксис қисқарди, тезлик ошди. Бу мақолада ҳар бир версиянинг амалиётда энг кўп ишлатиладиган имкониятларини кўриб чиқамиз.
PHP 8.0 — катта бурилиш
8.0 версияси билан тил JIT-компилятор, унион типлар ва атрибутларни олди. Кундалик ишда эса қуйидагилар энг фойдали бўлди:
- матч ифодаси —
switchнинг қатъий ва қиймат қайтарадиган муқобили. - Нуллсафе оператори
?->— занжирдагиnullтекширувларини қисқартиради. - Номли аргументлар — функсияга параметрларни номи билан узатиш.
- Конструкторда хусусиятларни эълон қилиш (сонструстор пропертй промотион).
final class User
{
public function __construct(
public readonly int $id,
public string $name,
) {}
}
$status = match ($code) {
200 => 'OK',
404 => 'Topilmadi',
default => 'Noma’lum',
};PHP 8.1 — энум ва реадонлй
2021-йил ноябрда чиққан 8.1 версияси узоқ кутилган энумларни олиб келди. Энди ҳолатлар рўйхатини оддий сатрлар билан эмас, тип хавфсиз тарзда ифодалаш мумкин. Шу версияда readonly хусусиятлар, never қайтиш типи ва Фиберс ҳам пайдо бўлди.
enum Status: string
{
case Draft = 'draft';
case Published = 'published';
}PHP 8.2 ва 8.3
8.2 (2022-йил декабр) readonly класслар ва DNF типларни қўшди, динамик хусусиятларни эса эскирган деб белгилади. 8.3 (2023-йил ноябр) типланган класс константалари, json_validate() функсияси ва #[\Override] атрибутини тақдим этди.
PHP 8.4 — пропертй ҳоокс
2024-йил ноябрда чиққан 8.4 версиясининг энг катта янгилиги — пропертй ҳоокс: геттер ва сеттер мантиқини тўғридан-тўғри хусусият ичида ёзиш имконияти. Шунингдек, асимметрик кўриниш (public private(set)) ва array_find() каби янги массив функсиялари қўшилди.
| Версия | Чиққан вақти | Асосий янгилик |
|---|---|---|
| 8.0 | 2020-йил ноябр | матч, JIT, номли аргументлар |
| 8.1 | 2021-йил ноябр | энум, реадонлй |
| 8.2 | 2022-йил декабр | реадонлй класслар |
| 8.3 | 2023-йил ноябр | типланган константалар |
| 8.4 | 2024-йил ноябр | пропертй ҳоокс |
Хулоса
Агар лойиҳангиз ҳали PHP 7 да ишлаётган бўлса, янгиланиш фақат хавфсизлик эмас, балки қисқароқ ва ишончлироқ код демакдир. Янгилашни тестлар билан, босқичма-босқич амалга оширинг.