„Jedną z najprzyjemniejszych funkcji, jakie oferuje PHP, jest podpowiadanie typu specjalnie dla tych, którzy wywodzą się z programowania obiektowego.
Z podręcznika PHP :
Deklaracje typu umożliwiają funkcjom wymaganie, aby parametry były określonego typu w czasie wywołania. Jeśli podana wartość jest nieprawidłowego typu, generowany jest błąd: w PHP 5 będzie to błąd krytyczny, który można naprawić, podczas gdy PHP 7 zgłosi wyjątek TypeError .
Powodem, dla którego jest to ważne, jest to, że daje ludziom, którzy będą używać twojego kodu – w szczególności tym, którzy będą pisać kod w oparciu o twój kod – jakie typy parametrów będzie akceptowany przez dany konstruktor lub funkcja.
Ale to nie wszystko, ponieważ wskazówki dotyczące typu mają również zastosowanie do typu danych, które funkcja może zwrócić.
Typy zwrotów z możliwością anulowania
Na początek załóżmy, że masz funkcję, która ma zwrócić jakiś obiekt. W tym przykładzie załóżmy, że mamy a, Posta słupek jest reprezentowany przez model. Oczywiście model będzie typu post, więc podpis klasy będzie wyglądał mniej więcej tak :
<?php
namespace Acme;
class Post {
// Attributes, Constructor, and Functions here.
}
Załóżmy teraz, że masz klasę drugorzędną, która będzie zwracać instancję wpisu. Kiedy używasz podpowiedzi typu dla funkcji, podpis będzie wyglądał mniej więcej tak:
<?php
namespace Acme;
class PostManager {
private $post;
// Constructor and other Functions here.
public function getPost(): Post
{
return $this->post;
}
}
Chodzi o to, że metoda może zwrócić post lub może zwrócić null, jeśli model nigdy nie został utworzony, przekazany do danej klasy lub po prostu nie istnieje z jakiegoś powodu, to musimy to uwzględnić.
Przykład: jeśli pracowałeś dogłębnie w WordPressie przez dłuższy czas, wiesz, że funkcje mogą zwracać wiele rzeczy (takich jak instancja WP_Errorlub tablica). Ale w najczystszym przypadku zorientowanym obiektowo, o którym mówię powyżej, patrzymy na funkcję, która może zwrócić nulllub może zwrócić instancję Post.
Aby to wskazać, możesz skonfigurować metodę w następujący sposób:
<?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;
}
}
Krótko mówiąc, dodanie prostego znaku zapytania przed typem obiektu mówi „Ta metoda może zwrócić wartość null lub instancję Post".
A dokładniej z podręcznika PHP:
Deklaracje typu dla parametrów i wartości zwracanych można teraz oznaczyć jako dopuszczające wartość null, poprzedzając nazwę typu znakiem zapytania. Oznacza to, że oprócz określonego typu
NULLmoże być przekazany jako argument lub odpowiednio zwrócony jako wartość.
Tak, to jest trochę długi post wyjaśniający prostą koncepcję. Ale uważam, że używanie konkretnych przykładów jest często bardziej pomocne niż zwykłe mówienie o tym w abstrakcie.