Kiemelt kép

PHP 8 újdonságok IV.: új függvények és változások

A PHP fejlesztőcsapata már egy ideje dolgozik a PHP következő főverzióján, a PHP 8.0-n, amely 2020. november 26-án fog megjelenni a tervek szerint és már túl vagyunk a harmadik RC verzión is. Ebben a posztsorozatban meg fogjuk nézni, hogy milyen főbb változások és új nyelvi elemek érkeznek a PHP-ba. Az előző posztokban egy-egy nagyobb újdonságról volt szó (match, típusosság, attribútumok), de most az apróbb változtatásokat és az új függvényeket/metódusokat/osztályokat nézzük meg közelebbről.

Új string függvények

str_contains

Eddig a PHP-ban nem volt beépített függvény arra, hogy egy adott karakterláncban megnézzük, hogy benne van-e egy másik. Persze az strpos(x, y) !== false ősidők óta elvégzi ezt a feladatot, de egyrészt nem szép, másrészt sok hibalehetőséget rejt: például elfelejtjük, hogy lehet 0. pozícióban is egyezés és != operátort használunk (ami 0-t is false-nak tekinti).

str_starts_with és str_ends_with

Ez a két új függvény hasonlóan az str_contains-hez a stringben keresést könnyíti meg, mégpedig akkor, ha ellenőrizni akarjuk, hogy az elején vagy a végén található-e a keresett szó. 

Hibakezelés

throw expression

A throw a PHP 8-as verziótól kezdve expression lesz, ami lehetővé teszi, hogy olyan helyeken dobjunk kivételeket, ahol egyébként csak expressionök lehetnek, például ?? operátor után vagy fn()-nél.

get_debug_type

A get_debug_type() a jelenlegi gettype() utódjaként jött létre, amely elég kevés információt adott a változó típusáról. Például ha egy „Foo/Bar” osztály példányának akartuk megnézni a típusát, akkor csak annyit tudtunk meg, hogy object, de azt külön le kellett kérdezni, hogy milyen objektum valójában. A skaláris típusok nevei is pontosítva lettek, így amellett, hogy a régi függvény is megmarad, kaptunk egy sokkal jobb verziót. Az eltérések listája az RFC-ben olvasható.

preg_last_error_msg

Ha tudni akarjuk egy PCRE regex művelet hibára futott-e, akkor most is le tudjuk kérdezni a hibakódot a preg_last_error() segítségével, de mostantól a pontos hibaüzenetet is ki tudjuk írni ezzel az új függvénnyel. 

::class hívása objektumokon

Ha egy objektumról tudni akarjuk, hogy az milyen osztály (FQN), akkor a get_class($obj) függvényt tudtuk használni, de az új főverzió lehetővé teszi, hogy objektumokon is meghívhassuk a ::class mágikus konstanst, tehát $obj::class.

ValueError

Egy új Error osztály, amely számtalan eddigi értékkel kapcsolatos warningot fog kiváltani. Például az strpos függvény harmadik paramétereként megadhatunk egy offsetet, hogy honnan kezdje a keresését, amelynél ha túl nagy értéket adunk át kapunk egy warningot („Offset not contained in string in …”). Ezt a warningot a PHP 8-as kódokban már ValueError váltja ki, amely része egy nagyobb módosításcsomagnak a hibakezelés kapcsán.

El nem kapott kivételek

A „non-capturing catches” RFC-nek hála lehagyhatjuk a változókat a catch ágon. Gondoljunk bele, eddig hányszor volt olyan, hogy egy Exception elkapása során nem használjuk fel az általában $e vagy $exception nevű változóinkat, de kötelező megadni. Ha például elkapunk egy PermissionException-t, akkor pontosan tudjuk, hogy nincs jogosultság a művelet végrehajtásához, ezért nem kell megnézni mi az üzenet. 

Végzetes és nem várt hibák

Van néhány változás, ami mellett nem szabad elmenni szó nélkül. 

  • Ha van egy fatal errorunk, akkor azt nem fogjuk tudni a PHP 8-tól a @ operátorral némítani. 
  • E_ALL lesz az error_reporting alapértelmezett szintje.
  • Szintet lépnek a különböző hibák az új módosításcsomagnak hála. Tehát például több warning helyett Error/Exception és több notice helyett warning lesz.
  • A PDO a jelenlegi csendes üzemmódról alapértelmezésként PDO::ERRMODE_EXCEPTION-re vált át.
Még néhány újdonság

A fenti lista közel sem teljes, számtalan kisebb vagy internal szinten érdekes változást tartalmaz, amelyet itt nem soroltam fel.


Ha nem szeretnél lemaradni a hasonló posztokról, kövesd a blog Facebook oldalát!