🚀
Hosting

PHP 8.5: pipe operatori, URI kengaytmasi va boshqa yangi funksiyalar

12.11.2026
← Barcha maqolalar

PHP 8.5 versiyasi 2025-yil noyabr oyida chiqdi. U 8.4 kabi katta tub o'zgarishlar olib kelmadi, lekin kundalik kod yozishni sezilarli qulaylashtiradigan bir nechta yangilik qo'shdi. Eng ko'p muhokama qilingani pipe operatori bo'ldi, u funksiyalarni ketma-ket zanjir qilib chaqirish imkonini beradi. Bundan tashqari, URL manzillar bilan ishlash uchun yangi standart kengaytma, massivning birinchi va oxirgi elementini olish funksiyalari va natijani e'tiborsiz qoldirishdan ogohlantiradigan atribut paydo bo'ldi. Quyida har birini amaliy misollar bilan ko'rib chiqamiz.

Pipe operatori: ichma-ich chaqiruvlar o'rniga zanjir

PHP'da bir qiymatni bir nechta funksiyadan ketma-ket o'tkazish kerak bo'lganda kod odatda ichma-ich yoziladi. Masalan, maqola sarlavhasidan URL uchun qisqa nom yasashda avval bo'shliqlarni olib tashlash, keyin kichik harfga o'tkazish, so'ng bo'shliqlarni chiziqcha bilan almashtirish kerak. Ichma-ich yozilgan kod o'ngdan chapga o'qiladi va qavslar ko'payib ketadi. Yangi |> operatori esa qiymatni chapdan o'ngga, xuddi ish ketma-ketligidek o'tkazadi.

Buxorodagi mehmonxona sayti uchun xona sahifalarining manzilini yasaydigan kodni solishtirib ko'ramiz:

$sarlavha = '  Lyuks Xona Bog Tomonda  ';

// Avvalgi usul: ichma-ich chaqiruvlar
$slug = str_replace(' ', '-', strtolower(trim($sarlavha)));

// PHP 8.5: pipe operatori
$slug = $sarlavha
    |> trim(...)
    |> strtolower(...)
    |> (fn($s) => str_replace(' ', '-', $s));

echo $slug; // lyuks-xona-bog-tomonda

Bu yerda e'tibor berish kerak bo'lgan ikki qoida bor. Birinchidan, operatorning o'ng tomonida bitta parametr qabul qiladigan chaqiriladigan ifoda turishi kerak, shuning uchun trim(...) kabi birinchi darajali chaqiruv sintaksisi ishlatiladi. Ikkinchidan, o'q funksiyasi (fn) ishlatilsa, uni qavsga olish shart, aks holda sintaksis xatosi chiqadi. Bir nechta parametr talab qiladigan funksiyalar, masalan str_replace(), aynan shunday o'q funksiyasi ichiga o'raladi.

Klonlashda xususiyatlarni o'zgartirish

PHP 8.1 dan beri readonly xususiyatlar mavjud, lekin ularning bitta qiymati o'zgargan nusxasini yaratish noqulay edi: klonlangan obyektda readonly xususiyatni qayta yozib bo'lmaydi. PHP 8.5 da clone() ikkinchi argument sifatida yangi qiymatlar massivini qabul qiladi. Bu o'zgarmas obyektlar bilan ishlashni ancha soddalashtiradi.

final class Narx
{
    public function __construct(
        public readonly int $summa,
        public readonly string $valyuta = 'UZS',
    ) {}

    public function chegirma(int $foiz): static
    {
        return clone($this, ['summa' => intdiv($this->summa * (100 - $foiz), 100)]);
    }
}

$narx = new Narx(400000);
$yangi = $narx->chegirma(10);
echo $yangi->summa; // 360000

URI kengaytmasi: manzillarni to'g'ri tahlil qilish

Uzoq yillar davomida PHP'da URL manzilni qismlarga ajratish uchun parse_url() funksiyasi ishlatilgan. Lekin u hech qaysi rasmiy standartga to'liq mos kelmaydi va ba'zi g'ayrioddiy manzillarni brauzerdan boshqacha tushunadi, bu esa xavfsizlik muammolariga sabab bo'lishi mumkin. PHP 8.5 da standart tarkibga kiruvchi URI kengaytmasi qo'shildi. Unda ikki xil klass bor: RFC 3986 standartiga mos Uri\Rfc3986\Uri va brauzerlar ishlatadigan WHATWG standartiga mos Uri\WhatWg\Url.

$uri = new Uri\Rfc3986\Uri('https://example.uz/katalog?sahifa=2');

echo $uri->getHost();  // example.uz
echo $uri->getPath();  // /katalog
echo $uri->getQuery(); // sahifa=2

Bu kengaytma ayniqsa foydalanuvchi kiritgan havolalarni tekshiradigan saytlar uchun foydali. Masalan, faqat o'z domeningizga qayta yo'naltirishga ruxsat berish kerak bo'lsa, manzilni brauzer tushunganidek tahlil qilish ochiq qayta yo'naltirish zaifligidan himoya qilishga yordam beradi.

array_first(), array_last() va NoDiscard atributi

Massivning birinchi yoki oxirgi elementini olish uchun ilgari reset(), end() yoki array_key_first() bilan murakkab yozuvlar kerak edi. Endi array_first() va array_last() funksiyalari to'g'ridan-to'g'ri qiymatni qaytaradi, massiv bo'sh bo'lsa esa null beradi. Bu, masalan, so'nggi buyurtmani yoki eng birinchi izohni olishda kodni qisqartiradi.

#[\NoDiscard] atributi bilan belgilangan funksiyaning natijasi ishlatilmasa, PHP ogohlantirish beradi. Bu natijasi muhim bo'lgan funksiyalar uchun mo'ljallangan, masalan xato holatini qaytaradigan saqlash funksiyasi. Agar natijani ataylab e'tiborsiz qoldirmoqchi bo'lsangiz, chaqiruv oldidan (void) yoziladi.

#[\NoDiscard("saqlash natijasini tekshiring")]
function saqla(array $malumot): bool
{
    // ... bazaga yozish
    return true;
}

saqla($forma);          // Warning: natija ishlatilmadi
$ok = saqla($forma);    // to'g'ri
(void) saqla($forma);   // ataylab e'tiborsiz

Xatolarni tuzatishni osonlashtiradigan o'zgarishlar

Avval Fatal error yuz berganda, masalan xotira tugaganda yoki bajarilish vaqti oshganda, jurnalda faqat xato bo'lgan qator ko'rsatilardi. PHP 8.5 da bunday xatolar uchun ham chaqiruvlar zanjiri (backtrace) chiqariladi, shuning uchun muammoga qaysi yo'l orqali kelinganini aniqlash osonlashdi. Yana get_error_handler() va get_exception_handler() funksiyalari qo'shildi, ular joriy o'rnatilgan xato ishlovchisini qaytaradi.

Shuningdek, doimiy ifodalarda, masalan atribut parametrlarida, statik anonim funksiyalardan foydalanish mumkin bo'ldi. Bu tekshiruv qoidalarini atributlar orqali e'lon qiladigan freymvorklar uchun qulay. Takroriy so'rovlarda DNS va ulanish ma'lumotlarini qayta ishlatish uchun cURL'ning doimiy ulashiladigan dastaklari ham qo'shildi.

Eskirgan narsalar va o'tishdan oldingi tekshiruv

PHP 8.5 da bir nechta eski yozuv usullari eskirgan deb belgilandi. Ulardan eng ko'p uchraydiganlari:

Bu o'zgarishlar sayt ishlashini to'xtatmaydi, lekin jurnalda Deprecated ogohlantirishlarini ko'paytiradi. Saytni 8.5 ga o'tkazishdan oldin CMS va plaginlaringizning ushbu versiyani rasman qo'llab-quvvatlashini tekshiring, chunki yangi versiya chiqqandan keyin ba'zi plaginlarga moslashish uchun vaqt kerak bo'ladi. Ishlab turgan sayt uchun ko'pincha avval sinov nusxasida tekshirib, keyin asosiy saytga o'tish eng xavfsiz yo'l.

sayt.uz hostingida PHP versiyasi ISPmanager panelida har bir sayt uchun alohida tanlanadi, shuning uchun 8.5 ni avval bitta sinov subdomenida, masalan test.example.uz da sinab ko'rish mumkin. Agar panelda kerakli versiya ko'rinmasa, kabinet orqali texnik yordamga murojaat qilib, uning mavjudligini aniqlang.

O'xshash maqolalar

📦 Plesk'dan boshqa panelga ko'chish: nimani olish va nimaga e'tibor berish kerak ⏱️ Har daqiqalik cron serverni qanday og'irlashtiradi va uni qanday yengillatish mumkin 🧪 Flask ilovasini hostingga joylash: wsgi fayli, Passenger, Gunicorn va xavfsiz sozlamalar 🧰 PHP kengaytmalarini yoqish: intl, gd, imagick, zip
🌐 Til
🇺🇿 O'zbek ✓ 🇺🇿 Ўзбек 🇷🇺 Русский 🇬🇧 English