Typy w PHP 馃悩

W tym artykule dowiesz si臋 czym jest system typ贸w w PHP i jakie typy w tym j臋zyku wyst臋puj膮. Mo偶liwe 偶e nawet co艣 ci臋 zaskoczy 馃槈

馃憢 Wst臋p

Cze艣膰 cze艣膰! 馃槈

Postanowi艂em troch臋 poopisywa膰 to co najbardziej znam, a tym samym b臋dzie to j臋zyk PHP. Zaczniemy od systemu typ贸w, kt贸ry w tym j臋zyku jest nawet ciekawy, a i mam nadziej臋 偶e w kolejnych wersjach pojawi膮 si臋 coraz to ciekawsze rzeczy.

System typ贸w, b臋dziemy omawia膰 na wersji PHP 8.2. Je艣li b臋dziesz to czyta膰 w przysz艂o艣ci kiedy to ju偶 b臋d膮 inne wersje PHP to polecam nadgoni膰 zmiany w dokumentacji. Mam nadziej臋, 偶e b臋d膮 si臋 pojawia膰 kolejne Release notes takie jak tu: https://www.php.net/releases/8.2/en.php 馃殌

馃攳 Base types

W PHP stanowi膮 (jak w sumie sama nazwa m贸wi) podstawowe typy. Generalnie nie powinny one stanowi膰 偶adnych problem贸w przy ich stosowaniu. Cz臋艣膰 z nich na pewno znasz z innych j臋zyk贸w, zw艂aszcza typy skalarne, kt贸re w wi臋kszo艣ci j臋zyk贸w s膮 podobne, a czasem identico.

馃П Built-in types

Typy wbudowane to typy:

  • null
  • array
  • object
  • resource
  • never
  • void
  • Relative class types: self, parent, and static
  • Typy skalarne:
    • bool
    • int
    • float
    • string
  • callable

Wszystkie ww. typy s膮 艣ci艣le zintegrowane z PHP i nie mog膮 by膰 powielane przez typy stworzone przez u偶ytkownika.

Szczeg贸艂owo to, kt贸ry typ w jaki spos贸b dzia艂a, b臋d臋 omawia膰 w kolejnych wpisach.

馃敜 Literal types

S膮 to typy, kt贸re nie tylko sprawdzaj膮 typ warto艣ci, ale tak偶e sam膮 warto艣膰. W PHP s膮 tylko dwa typy literalne: true 鉁 oraz false 鉂. Dzi臋ki nim mo偶na zdefiniowa膰 metody, kt贸re zawsze maj膮 zwr贸ci膰 true oraz takie, kt贸re zawsze musz膮 zwr贸ci膰 false

馃懃 User-defined types

S膮 to wszelkiego rodzaju interfejsy, klasy oraz enumeracje. Wszystko to co jest potrzebne do OOP i przestrzeganiu zasad SOLID, DRY, 馃拫, YAGNI, … .

U偶ytkownik PHP sam sobie definiuje te typy, to jak si臋 nazywaj膮 i jak maj膮 si臋 zachowywa膰 馃挕

馃攢 Composite types

Typy kompozytowe to takie, kt贸re 艂膮cz膮 kilka typ贸w prostych w typy z艂o偶one. W PHP mo偶na robi膰 to na dwa sposoby.

馃寪 Intersection types

Krzy偶贸wk臋 typ贸w mo偶na robi膰 za pomoc膮 znaku &. Tak po艂膮czone typy akceptuj膮 warto艣ci tylko te, kt贸re spe艂niaj膮 wiele deklaracji, to troch臋 tak jakby zmiksowa膰 dwa typy w jeden i oczekiwa膰, 偶e co艣 ma oba typy na raz 馃

Za艂贸偶my przypadek kiedy co艣 implementuje interfejsy A, B oraz C. Je艣li b臋dziemy chcieli oczekiwa膰 jako argument metody co艣 co jest skrzy偶owaniem tych trzech interfejs贸w no to zrobimy co艣 takiego:

public function someMethod(A&B&C $abc);

Mo偶e jest to ma艂o czytelne, a sam problem opisany w przyk艂adzie da si臋 inaczej i czytelniej rozwi膮za膰, to mo偶e przyda si臋 to do innych zastosowa艅 鉁

馃敆 Union types

Union type jest czym艣 na zasadzie „ten typ albo tamten typ”. Union type akceptuje warto艣ci wielu r贸偶nych typ贸w. Aby taki typ 艂膮czny zadeklarowa膰 trzeba u偶y膰 znaku |

Za艂贸偶my przypadek oczekujemy interfejsu A albo B albo C jako argument metody. Sama klasa, kt贸r膮 u偶yjemy jako argumentu nie musi implementowa膰 wszystkich trzech interfejs贸w, wystarczy tylko jeden z nich.

public function someMethod(A|B|C $abc);

Typy kompozytowe om贸wi臋 dok艂adnie w kolejnych wpisach 馃槈

馃攧 Type aliases

PHP posiada tylko dwa typy aliasu.

  • mixed, kt贸ry odpowiada union type: object|resource|array|string|float|int|bool|null – czyli wi臋kszo艣膰 z Built-in Types
  • iterable, kt贸ry odpowiada union type: Traversable|array

Je艣li kogo艣 interesuje tworzenie w艂asnych alias贸w no to musz臋 niestety zabi膰 entuzjazm: PHP tego nie wspiera. Mo偶na u偶ywa膰 tylko ww. alias贸w… noo, ale zawsze mo偶na pisa膰 swoje unon types 馃榾(pss, mo偶na zrobi膰 Value Object i omin膮膰 ten problem, ale ciiii 馃か)

馃摑 Podsumowanie

W tym artykule zg艂臋bili艣my system typ贸w w PHP, odkrywaj膮c r贸偶norodno艣膰 podstawowych, wbudowanych i zdefiniowanych przez u偶ytkownika typ贸w. Poznali艣my typy skalarne, kompozytowe, krzy偶贸wki i unie, a tak偶e aliasy typ贸w馃挕

Dzi臋ki zdobytym informacjom, mo偶emy tworzy膰 efektywny i bezpieczny kod, wykorzystuj膮c bogactwo typ贸w dost臋pnych w PHP. 馃挭馃殌

Subscribe
Powiadom o
guest
0 komentarzy
Inline Feedbacks
View all comments
Spis tre艣ci
W艂膮czy膰 powiadomienia? Bardzo pragn臋 Dam sobie rad臋