Nullable-palautustyyppien käyttäminen PHP:ssä
"Yksi PHP:n mukavimmista ominaisuuksista on tyyppivihjeet erityisesti niille, jotka tulevat olio-ohjelmointitaustasta.
PHP käsikirjasta :
Tyyppimääritykset sallivat funktioiden vaatia, että parametrit ovat tietyn tyyppisiä kutsun aikana. Jos annettu arvo on väärää tyyppiä, syntyy virhe: PHP 5:ssä tämä on korjattavissa oleva kohtalokas virhe, kun taas PHP 7 heittää TypeError – poikkeuksen.
Tämä on tärkeä syy, koska se antaa ihmisille, jotka aikovat käyttää koodiasi – erityisesti niille, jotka kirjoittavat koodia koodiasi vastaan – minkä tyyppisiä parametreja tietty konstruktori tai funktio hyväksyy.
Mutta siinä on muutakin, koska tyyppivihjeitä voidaan soveltaa myös tietotyypeihin, jotka funktio voi palauttaa.
Nollattavat palautustyypit
Ensinnäkin, oletetaan, että sinulla on funktio, jonka on tarkoitus palauttaa jonkinlainen objekti. Oletetaan tässä esimerkissä, että meillä on a Postja viestiä edustaa malli. Luonnollisesti malli on post-tyyppinen, joten luokan allekirjoitus näyttää suunnilleen tältä :
<?php
namespace Acme;
class Post {
// Attributes, Constructor, and Functions here.
}
Oletetaan nyt, että sinulla on toissijainen luokka, joka palauttaa viestin esiintymän. Kun funktiolle käytetään tyyppivihjettä, allekirjoitus näyttäisi tältä :
<?php
namespace Acme;
class PostManager {
private $post;
// Constructor and other Functions here.
public function getPost(): Post
{
return $this->post;
}
}
Asia on siinä, että menetelmä voi palauttaa viestin tai se voi palata null, jos mallia ei ole koskaan instantoitu, siirretty tiettyyn luokkaan tai sitä ei yksinkertaisesti ole jostain syystä olemassa, meidän on otettava se huomioon.
Esimerkki: Jos olet työskennellyt WordPressissä perusteellisesti jonkin aikaa, tiedät, että funktiot voivat palauttaa useita asioita (kuten esiintymän WP_Errortai taulukon). Mutta puhtaimmassa oliokeskeisessä tapauksessa, josta puhun edellä, tarkastelemme funktiota, joka voi palauttaa nulltai saattaa palauttaa esiintymän Post.
Ja osoittaaksesi tämän, voit määrittää menetelmän seuraavasti:
<?php
namespace Acme;
class PostManager {
private $post;
// Constructor and other Functions here.
public function getPost(): ?Post
{
if ($this->post === null) {
return null;
}
return $this->post;
}
}
Lyhyesti sanottuna yksinkertaisen kysymysmerkin lisääminen objektityypin eteen sanoo "Tämä menetelmä voi palauttaa nollan tai esiintymän Post."
Tai tarkemmin PHP-oppaasta:
Parametrien ja palautusarvojen tyyppimääritykset voidaan nyt merkitä tyhjäksi lisäämällä tyypin nimen eteen kysymysmerkki. Tämä tarkoittaa, että määritetyn tyypin lisäksi
NULLse voidaan välittää argumenttina tai palauttaa arvona.
Joten, joo, tämä on hieman pitkä viesti selventääksesi suoraviivaista koneptia. Mutta konkreettisten esimerkkien käyttäminen on mielestäni usein hyödyllisempää kuin pelkkä abstrakti puhuminen.