Kiemelt kép

PHP 8 újdonságok II.: union types, mixed, Stringable

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. 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ő posztban a match expressionről volt szó, most pedig a típusosságról lesz.

Ahhoz, hogy jobban szemügyre vegyük az típusossággal kapcsolatos változásokat, előbb érdemes visszatekinteni az előző verziókban milyen előrelépések történtek a szigorúbb típusosság felé.

Idővonal

PHP 7.0 újdonságok:

  • bevezetésre kerül a strict_types deklaráció lehetősége
  • a függvényeknek deklarálható visszatérési típus
  • a függvényeknél deklarálható típusos paraméter

PHP 7.1 újdonságok:

  • bevezetésre kerülnek a nullable típusdeklarációk egy speciális ?típus formában
  • létrehozásra kerül egy új pseudo típus, az iterable

PHP 7.4 újdonságok:

  • bevezetésre kerül az osztályszintű változók típusos deklarálása
Union típusok és a mixed típus

Korábban már elérhetővé váltak a paraméter, osztályváltozó és visszatérési érték esetén a szigorú típusdeklarációk, de egy komoly hiányossággal szembesültünk: nem lehet úgy deklarálni semmit, hogy annak több típusa is lehessen. Éppen ezért szimplán nem deklaráljuk jelenleg, ami két dolgot jelenthet: a fejlesztő nem tudja/akarja meghatározni pl. egy paraméter típusát vagy több dolgot is elfogad. 

A PHP 8-ban már lehetőségünk lesz megmondani, hogy egy paraméter lehet int és float is egy függőleges vonal segítségével: int|float. A nullable így két alakban is leírhatóvá válik: int|null és ?int.

És ha egy változó tényleg, de tényleg bármit elfogad, akkor az új mixed segítségével azt is tudjuk szépen deklarálni. 

Jön a Stringable interfész

Ezzel az új interfésszel egy újabb esetet kezelnek le a PHP fejlesztői: paraméterként megadhatjuk, hogy nem csak stringeket, hanem olyan osztálypéldányokat is elfogadunk, amik rendelkeznek __toString() magic methoddal. 

A PHP automatikusan hozzá fogja rendelni ezt a Stringable interfészt a __toString-el rendelkező osztályokhoz, tehát nekünk nem kell kézzel megadni.

Nézzünk egy példát:

További információk

Union Types RFC
Mixed Type RFC
Stringable RFC

Ha hasznosnak találtad ezt a posztot, kérlek oszd meg másokkal is! :)


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