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
najstarszy
najnowszy oceniany
Inline Feedbacks
View all comments
Włączyć powiadomienia? Bardzo pragnę Dam sobie radę