"Üks kenamaid funktsioone, mida PHP pakub, on tüübivihjed spetsiaalselt neile, kes on pärit objektorienteeritud programmeerimise taustast.
PHP juhendist :
Tüübideklaratsioonid võimaldavad funktsioonidel nõuda, et parameetrid oleksid kõne ajal teatud tüüpi. Kui antud väärtus on vale tüüpi, siis genereeritakse viga: PHP 5 puhul on see taastatav fataalne viga, PHP 7 korral aga TypeError erandi.
Põhjus, miks see on oluline, seisneb selles, et see annab inimestele, kes hakkavad teie koodi kasutama – täpsemalt neile, kes kirjutavad koodi vastu koodi –, milliseid parameetreid antud konstruktor või funktsioon aktsepteerib.
Kuid siin on midagi enamat, sest tüübivihjed kehtivad ka andmetüübi kohta, mida funktsioon saab tagastada.
Nulleeritud tagastustüübid
Alustuseks oletame, et teil on funktsioon, mis peaks tagastama mingisuguse objekti. Selles näites oletame, et meil on a Postja postitust esindab mudel. Loomulikult on mudel post-tüüpi, nii et klassi allkiri näeb välja umbes selline :
<?php
namespace Acme;
class Post {
// Attributes, Constructor, and Functions here.
}
Oletame nüüd, et teil on teisejärguline klass, mis tagastab postituse eksemplari. Funktsiooni tüübivihje kasutamisel näeks allkiri välja umbes selline:
<?php
namespace Acme;
class PostManager {
private $post;
// Constructor and other Functions here.
public function getPost(): Post
{
return $this->post;
}
}
Asi on selles, et meetod võib tagastada postituse või nullkui mudelit pole kunagi instantseeritud, antud klassi edasi antud või seda lihtsalt mingil põhjusel ei eksisteeri, siis peame sellega arvestama.
Näide: kui olete WordPressiga mõnda aega põhjalikult töötanud, siis teate, et funktsioonid võivad tagastada mitu asja (nt eksemplari WP_Errorvõi massiivi). Kuid kõige puhtamal objektorienteeritud juhul, millest ma eespool räägin, vaatleme funktsiooni, mis võib tagastada nullvõi tagastada eksemplari Post.
Selle märkimiseks saate meetodi seadistada järgmiselt:
<?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;
}
}
Lühidalt, lihtsa küsimärgi lisamine objektitüübi ette ütleb: "See meetod võib tagastada null või eksemplari Post."
Või täpsemalt PHP käsiraamatust:
Parameetrite ja tagastusväärtuste tüübideklaratsioonid saab nüüd märgistada tühjaks, lisades tüübinime ette küsimärgi. See tähendab, et lisaks määratud tüübile
NULLsaab edastada vastavalt argumendina või tagastada väärtusena.
Niisiis, jah, see on natuke pikk postitus, et selgitada otsest mõistet. Kuid ma leian, et konkreetsete näidete kasutamine on sageli kasulikum kui sellest lihtsalt abstraktne rääkimine.