A PHP egy szkriptnyelv, amelyet nagyszámú felhasználó használ webfejlesztési célokra. A PHP legújabb stabil és frissített verziója, a 8.3 2023.11.23-án jelent meg. A 2000-ben megjelent PHP 3.x óta számos újítás és változás történt. A PHP még mindig a legnépszerűbb webfejlesztési (webdizájn) nyelvek közé tartozik, amelyeket nagyon nagy közönség használ. Ebben a cikkben kódpéldákkal vizsgáljuk és elemezzük a PHP 8.3 újításait és változásait.

PHP 8.3 főbb új szolgáltatások és fejlesztések

A PHP 8.3-ban számos jelentős újítás és fejlesztés található az előző PHP 8.2-hez képest. Ugyanakkor néhány funkció elavult. Most egyenként vizsgáljuk meg az újításokat és fejlesztéseket kódpéldákkal.

Beírt osztálykonstansok

A típus deklarálása nagyon fontos funkció a fejlesztők számára, amely növeli a stabilitást és csökkenti a hibaarányt a webfejlesztés során. A PHP 7.4-ben hozzáadásra került egy osztály tulajdonságainak típusdeklarációs funkciója. Bár a későbbi verziókban számos fejlesztés történt ezen a funkción, ez a funkció még mindig nem volt elérhető az osztály állandói számára. A PHP 8.3-mal most már lehetőség van az osztályokban lévő konstansok típusainak deklarálására.

// Doğru kullanım:
class MyClass {
    // Bildirilen tür ve değer aynı
    const string VERSION = "PHP 8.3"; // değer string
}

// Hatalı kullanım:
class MyClass {
    // Bildirilen tür ile değer farklı
    const int VERSION = "PHP 8.3"; // değer string
}

// Hatalı kullanım:
class MyClass {
    // Bildirilen tür sınıf sabitleri için desteklenmiyor
    const void VERSION = "PHP 8.3"; // değer string
}

Egyes típusdeklarációk nem támogatottak az osztálykonstansoknál.

Nem támogatott típusdeklarációk az osztálykonstansokhoz: void, callable, never

Egy új függvény: json_validate()

Amikor JSON formátumú adatokkal dolgozunk (json-kódolt adatok), az adatok felhasználása előtt ellenőriznünk kell, hogy a bejövő adatok érvényesek-e. Ezt a PHP 8.3 előtti verziókban a következő vagy hasonló módszerekkel tettük.

// PHP 8.3'ten önceki sürümlerde JSON verisini doğrulama

$data = $json_decode($maybeJSON);

if (json_last_error() === JSON_ERROR_NONE) {
    // $data ile gerçekleştirilecek işlemler
}

Ebben a régi példában a JSON-adatok érvényesítésekor a PHP jelentős memóriát fogyaszthat, az adatok méretétől függően. A PHP 8.3-ban egy új PHP függvény került hozzáadásra, amely teljesítményorientált gyors megoldást hoz létre: json_validate(). Az alábbiakban ennek a funkciónak a használati forgatókönyvét mutatjuk be.

// PHP 8.3'te JSON verisini doğrulama
$data = $json_decode($maybeJSON);

if (json_validate($maybeJSON)) {
    // $data ile gerçekleştirilecek işlemler
}

Egy új funkció: #[Override]

Az interfészek PHP-ben való implementálásakor részletes funkcionalitást biztosítunk az interfész metódusaihoz. Egy osztály példányának létrehozásakor felülbírálhatjuk a szülőmetódusokat, ha létrehozunk egy alternatív verziót azonos névvel és kompatibilis aláírással. Ez komoly problémákat okozhat a szoftverben. Röviden, a probléma az, hogy úgy gondoljuk, hogy egy kis figyelmen kívül hagyott elírás következtében felülírtuk a fő módszert.

A PHP 8.3 #[Override] funkciója megoldást nyújt erre a problémára. Most lássuk ezt a példában.

class A {
    protected function myOverrideFunc(): void {}

// Doğru kullanım
// Bu örnek çalışacak
// Üstteki sınıfta ilgili method var ve geçersiz kılındı
class B extends A {
    #[\Override]
    public function myOverrideFunc(): void {}

// Hatalı kullanım
// Bu örnek çalışmayacak, çünkü ana sınıfta method yok
// Muhtemelen gözden kaçan bir yazım hatası
class C extends A {
    #[\Override]
    public function myOverrideFunction(): void {}
}

Csak olvasható tulajdonságok mély klónozása

A PHP bevezette az egyes osztálytulajdonságok írásvédettként való deklarálásának lehetőségét a PHP 8.1-ben, és a PHP 8.2-ben a teljes osztályhoz való hozzárendelését. A legtöbb webfejlesztő azonban úgy gondolta, hogy az ilyen funkciókat tartalmazó osztályokkal való munkavégzés során fellépő korlátozások megakadályozzák a programozási logika gyakorlatiasságát.

Ezen változtatni RFC Két fő ajánlás született:

csak olvasható

  1. readonly lehetővé téve a nem engedélyezett osztályok bővítését
  2. readonly lehetővé teszi a funkciók újraindítását a klónozás során

A második javaslatot a PHP 8.3 tartalmazza. Ez az új megközelítés hozzáadódott a PHP 8.3-hoz readonly tulajdonságokkal rendelkező osztály példányaireadonly tulajdonságok) __clone Mágikus módszerével lehetővé teszi az újraindítást.

Ez az RFC kódpélda segíthet megértenünk, hogyan működik ez az új módszer:

Osztálykonstansok és Enum-tagok dinamikus lekérése

A PHP többi szolgáltatásától eltérően az osztálykonstansok és az enum tagok változónevekkel való rögzítése egy kicsit bonyolultabb. A PHP 8.3 előtt ezt az alábbi példához hasonlóan megtehettük:

class Foo {
    public function __construct(
        public readonly DateTime $bar,
        public readonly DateTime $baz
    ) {}

    public function __clone() {
        // Klon çağrıldığında $bar yeni bir DateTime alacak
        $this->bar = clone $this->bar;

        // Ardından bu metod çağrılacak
        $this->cloneBaz();
    }

    private function cloneBaz() {
       // Bu __clone içinden çağrıldığından dolayı doğru bir kullanımdır
        unset($this->baz);
    }
}

$foo = new Foo(new DateTime(), new DateTime());
$foo2 = clone $foo;
class MyClass {
    public const THE_CONST = 9;
}

enum MyEnum: int {
    case FirstMember = 9;
    case SecondMember = 10;
}

$constantName = 'THE_CONST';
$memberName = 'FirstMember';

echo constant('MyClass::' . $constantName);
echo constant('MyEnum::' . #memberName)->value;

Most kapjuk meg az értékeket a fenti példában szereplő osztály és enum definíciók használatával PHP 8.3-ban:

$constantName = 'THE_CONST';
$memberName = 'FirstNumber';

echo MyClass::{$constantName};
echo MyEnum::{$memberName}->value;

Egy új módszer: getBytesFromString()

Elmondhatjuk, hogy ez a módszer volt a legváratlanabb a PHP 8.3-ban hozzáadott szolgáltatások közül: Véletlenszerű szöveg generálása előre jóváhagyott karaktergyűjtemény segítségével.

Ez az új módszer nagyon egyszerű és világos. A metódushoz erőforrásként adunk néhány karaktert, és megadjuk, hogy ebből hányat szeretnénk használni. Ez minden! Most a módszerünk véletlenszerű karakterekkel adja vissza az eredményeket, amíg el nem éri a megadott hosszúságot. Most tisztázzuk ezt egy példával

$generateRandomString = new Random\Randomizer();
$allowedChars = 'ABCDEFGHJKMNPQRSTVWXYZ';

$generateRandomString->getBytesFromString($allowedChars, 6) // "MBDSFD" - rastgele gelen veri
$generateRandomString->getBytesFromString($allowedChars, 6) // "DJSDKA" - rastgele gelen veri
$generateRandomString->getBytesFromString($allowedChars, 4) // "SDLA" - rastgele gelen veri

Előfordulhat, hogy a kimenet hosszabb, mint az általunk megadott karakterek teljes hossza. Ezt tettük az alábbi példában:

$generateRandomString = new Random\Randomizer();
$allowedChars = '123456';

$generateRandomString->getBytesFromString($allowedChars, 8) // "47384252" - rastgele gelen veri

Ha a paraméterként megadott karakterek mindegyike eltérő, akkor annak a valószínűsége, hogy melyiket választjuk, egyenlő. Azonban több azonos karaktert is előállíthatunk a kimenetben, ha egynél több azonos karaktert adunk a támogatott karakterlistánkhoz. Ezt mutattuk be a következő példában.

$generateRandomString = new Random\Randomizer();
$allowedChars = 'AAAAA12345';

$generateRandomString->getBytesFromString($allowedChars, 5) // "4AA12" - rastgele gelen veri
$generateRandomString->getBytesFromString($allowedChars, 8) // "38A19AA5" - rastgele gelen veri

Új módszerek: getFloat() és nextFloat()

Ebben az újításban a PHP 8.3 két új módszert vezet be, amelyek kiterjesztik a PHP véletlenszerű kiterjesztését: getFloat() és nextFloat().

Példa ezekre a módszerekre:

$generateRandomNumber = new Random\Randomizer();

// Rastgele ondalıklı (float) bir rakam oluştur
// Değer 0 ile 5 arasında olsun
$generateRandomNumber->getFloat(0,5); // 2.483929 - rastgele gelen veri

// 0 ile 1 arasında rastgele ondalıklı bir rakam oluştur
$generateRandomNumber->nextFloat(); // 0.4828258 rastgele gelen veri

Kisebb innovációk és fejlesztések a PHP 8.3-ban

A fenti újításokon kívül a PHP 8.3 tucatnyi egyéb kisebb fejlesztést és újítást tartalmaz. Ezeket a forrásdokumentumaikkal együtt az alábbi listában soroltuk fel.

A PHP 8.3-ban elavult

A PHP minden új verziója esetén néhány kód elavulttá válik. Soha nem ajánlott ezeket a funkciókat használni, miután teljesen elavulttá váltak. Ha elavult kódot használ, hibaüzenet jelenik meg a kód végrehajtásakor.

A PHP 8.3 elavultságainak listája:

PHP 8.3

Ebben a cikkben áttekintettük a PHP 8.3 fontos változásait és újításait. A PHP 8.3 változásainak részletesebb listájáért hivatalos változásnapló Javasoljuk, hogy tekintse át. Ha szeretné frissíteni kódjait vagy webhelyét PHP 8.2-ről PHP 8.3-ra, ez az útmutató hasznos lehet: PHP 8.3 migrációs útmutató -> https://www.php.net/manual/en/migration83.php

Ha aggódik a PHP verziók és a migráció miatt, javasoljuk, hogy hagyjon egy kis időt az új verziónak a PHP 8.3-ra való frissítésére.

PHP és JavaScript nyelvek és kapcsolódó technológiák teljes lefedettsége, mint Onur Özden Web Çözümleri Web szoftver Szolgáltatásokat kínálunk.  Ha kérdése vagy kérése van, gyorsan felveheti velünk a kapcsolatot a bal alsó sarokban található Whatsapp gombbal, hogy árajánlatot kérjen.