8 legnépszerűbb új funkció a PHP 8-ban – CloudSavvy IT

Avatar admin | 2021.01.07. 9 Views 0 Likes 0 Ratings

9 Views 0 Ratings Rate it

PHP logó

A PHP 8 2020 november végén jelent meg. Ez egy jelentős új verzió, amely további funkciókkal és teljesítménybeli fejlesztésekkel frissíti a nyelvet.

Ebben a cikkben megnézzük a PHP 8 által kínált legnagyobb fejlesztéseket. A kiegészítések és módosítások teljes listája a hivatalos dokumentáció. A dokumentumok tartalmazzák a átfogó migrációs útmutató a projektek PHP 7.4-es frissítéséhez.

1. Attribútumok

Az attribútumok, más neveken más néven kommentárok, mechanizmust biztosítanak a metaadatok hozzáadásához a kódbázisba. Attribútumok osztályokkal, módszerekkel, függvényekkel és tulajdonságokkal használható. Könnyebb velük dolgozni, mint a dokblokk megközelítés számos PHP 7 projekt fogadta el.

Az attribútumokat egyszerű osztályoknak definiálják, amelyek maguk is a PHP beépített bejegyzéseivel vannak ellátva Attribute tulajdonság:

#[Attribute]
class CloudSavvyAttribute {
 
    protected string $value;
 
    public function __construct(string $value) {
        $this ->; value = $value;
    }
 
    public function getValue() : string {
        return $this ->; value;
    }
 
}

Ezután a kódalapon belüli entitásokhoz csatolhatók:

#[CloudSavvyAttribute("Example")]
class CloudSavvyClass {
    // ...
}

Az attribútumok a Reflection API-n keresztül letöltve. Ellenőrizheti és összeállíthatja egy osztályon, módszeren vagy más kódbázis-összetevőkön meghatározott attribútumokat. Az attribútumok valószínűleg a keretekben és a könyvtárakban a leghasznosabbak, ahol segítenek kivonni az alkalmazás-összetevők, például az útvonal-meghatározások és a függőség-befecskendezési vezetékek egyszeri feltérképezését.

2. Megnevezett érvek

Nevezett érvek lehetővé teszi a paraméterek átadását a módszerekhez és függvényekhez egy tömbszerű konstrukció segítségével. Ez egyszerűbbé teszi az opcionális paraméterek kihagyását és a soron kívüli továbbítást.

function foo(?string $a=null, ?string $b=null, ?string $c=null) : void;

A PHP 7-ben a fenti függvény meghívása az érték átadása közben "demo" nak nek $c a következő meghívást igényelte:

A PHP 8-ban a következő szintaxis használható helyette:

Ezáltal a sok választható argumentummal ellátott függvényhívások kevésbé ismétlődnek és könnyebben karbantarthatók.

Az osztály tulajdonságainak kezdeti értékekkel való feltöltése a konstruktor egyik leggyakoribb szerepe. Az alábbihoz hasonló kód mindennapos a PHP 7 kódbázisában:

class Example {
 
    protected ?string $Property;
 
    public function __construct(?string $Property=null) {
        $this ->; Property = $Property;
    }
 
}

A PHP 8 támogatja a Kivitelezői ingatlan promóció, rövidített szintaxis, amely lehetővé teszi a tulajdonságmeghatározás, a gépírás és a népesség inline kombinálását a konstruktor aláírásában. A fenti példát a következőképpen lehet átírni:

class Example {
    public function __construct(
        protected string $Property=null
    )
}

Ez a stílus eltávolítja az ismétlést. Használata megkönnyíti a további konstruktor tulajdonságok hozzáadását a jövőben, csökkentve a módosítandó kódrészek számát.

4. Uniótípusok

A PHP típusrendszere tovább fejlődik a PHP 8-mal. Most már lehetőség van a típusokra utalni Kettő vagy több „egyesülése” típusok, ahol a típus értéke az unió bármelyik típusából származhat.

public function foo(string|int $bar) : int|float;

A fenti kitalált példában a foo() függvény elfogadja a karakterláncokat és az egész számokat is. Vagy egész számot, vagy lebegőt ad vissza.

A gyakorlatban ez a képesség valószínűleg a leghasznosabb, ha a tulajdonságokra és a metódus paramétereire alkalmazzák – jó forma elfogadni a különféle bemeneti típusokat és normalizálni egy jól definiált egyetlen kimeneti típusra.

5. Meccs kifejezés

Az új match kifejezés egy terser biztonságosabb alternatíva a jól ismert switch. Nem igényli a case és break utasításokat, támogatja a kombinált feltételeket, és egy új kódblokk megadása helyett értéket ad vissza. A típusú kényszer ki van kapcsolva, tehát 1.0 (úszó) nem tekinthető egyenértékűnek a következővel: "1.0" (karakterlánc), ellentétben a használatával switch.

Itt van egy tipikus PHP 7 switch:

switch (1.0) {
    case 1.0:
        $result = "Float!";
        break;
    case "foo":
    case "bar":
        $result = "foobar!";
        break;
}

És így nézhet ki ugyanaz a kód a PHP 8-mal:

$result = match (1.0) {
    1.0 =>; "Float!",
    "foo", "bar" =>; "foobar!"
}

Ismét az új megközelítés sokkal tömörebb. Az egyik figyelmeztetés, hogy ki kell emelni, hogy a kombinált feltételek szintaxisának értékei nem egy tömbben vannak meghatározva, hanem egyszerű vesszővel elválasztott halmazként, hasonlóan a függvény meghívásához.

6. A „Nullsafe” üzemeltető

Egy másik, más nyelvektől kölcsönzött fogalom, a PHP 8 már támogatja inline null ellenőrzés automatikus rövidzárlattal. Felépíthet egy ellenőrzési láncot, amely megszakad, visszatér null, amikor bármely elem értékelése sikertelen.

A PHP 7-ben:

$photo = null;
if ($user !== null) {
    if ($user ->; profile !== null) {
        if ($user ->; profile ->; getPhoto() !== null) {
            $photo = $user ->; profile ->; getPhoto() ->; getPath();
        }
    }
}

És a PHP 8-ban:

$photo = $user? ->; profile? ->; getPhoto()? ->; getPath();

A PHP 8 ismét egyszerűbb megoldást kínál, amely kiküszöböli a fészkelést. Ennek eredményeként lényegesen kevesebb kód tesztelhető és karbantartható.

7. Szigorúbb típusú rendszer

Már megvizsgáltuk, hogy az Unió típusai hogyan adnak még egy rugalmassági réteget a PHP 8 típusú rendszerhez. Ezen a területen számos további változás fokozza a típusellenőrzés szigorúságát és következetességét.

A szám-összehasonlítás húrja most józanabb. 0 (egész szám) már nem egyenértékű a következővel: "" (üres karakterlánc) és összehasonlítások, mint pl 123 == "123abc" értékelje most false, nem true. Ezek a változtatások segítenek csökkenteni az összehasonlítási hibák esélyét a kódbázisban, bár némi munkára lehet szükség a régi projektek kompatibilitásának biztosításához.

A típusrendszer szintén egyértelművé vált mixed típus (annak jelzésére, hogy bármilyen érték kompatibilis), valamint a static visszatérési típus (támogatja a késői statikus kötést). Másutt az absztrakt módszerek aláírásait a tulajdonságokban már megfelelően ellenőrzik.

Ezek a változtatások összességében elősegítik a PHP támogatását az erősen tipizált programozáshoz. A típusú tippek következetes használata kiküszöböli a hibákat, amelyek létezhetnek a gyengén beírt nyelveken, nagyobb biztonságot nyújtva a fejlesztők számára abban, hogy a kód rendeltetésszerűen működik.

8. JIT

A listánk utolsó bejegyzése inkább a kulisszák mögötti képesség, mint egy nyelvi jellemző. A PHP 8 támogatja a Just-In-Time fordítási támogatást, amely jelentősen növelheti a teljesítményt.

Az ismétlődő feladatokat futtató, hosszú ideje futó szkriptek részesülnek leginkább a JIT összeállításából. A referenciaértékek jelzik a javulás kevésbé lesz kifejezett a webes alkalmazásokban, ahol a PHP található leggyakrabban. A JIT hozzáadása hozzájárulhat ahhoz, hogy a PHP kiterjedjen a programozás más területeire is, növelve ezzel a nyelv általános vonzerejét és sokoldalúságát.

A JIT-et engedélyezni kell az új beállítások használatával a php.ini konfigurációs fájl. Az elérhető értékekről és azok hatásairól részletes útmutatás található a dokumentáció; általános alapértelmezettként azonban a következőket javasoljuk:

<code>opcache.enable=1
opcache.jit_buffer_size=100M
opcache.jit=1255</code>

Következtetés

Csak a nyolc legfontosabb kiegészítést és módosítást vizsgáltuk meg a PHP 8-ban. Érdemes átnézni a hivatalos kiadási megjegyzések mielőtt elkezdené használni a PHP 8-at a projektjeiben, mivel még számos apróbb funkció van, amelyeket itt nem tudtunk lefedni.

Noha a legtöbb változtatás visszamenőleg kompatibilis, a lehetséges gotchák tartalmazzák a típusrendszer-fejlesztéseket és a standard könyvtáron belüli változtatásokat. Megtalálhatja a teljes migrációs útmutató a PHP dokumentációs oldalán.


Source link


9 Views 0 Ratings Rate it

  • Minden jog fenntartva 2019-2020. Hogyankészítsek.Hu Impresszum Adatkezelési szabályok