PHP – Biblioteka SPL – Funkcje class_* oraz spl_*

Wprowadzenie w świat biblioteki standardowej PHP - SPL (Standard PHP Library). Omówienie funkcji class_* oraz spl_*.

381
views

Chciałbym aby ten artykuł był początkiem serii postów przybliżających możliwości SPL – czyli Standard PHP Library.

SPL jest zbiorem funkcji, struktur danych, iteratorów, wyjątków oraz klas do pracy z plikami. Podsumowując – zbiorem funkcji, interfejsów i klas pomagających rozwiązać typowe problemy.

Jest to wbudowana biblioteka, której nie musimy instalować osobno ponieważ wraz z posiadanym interpreterem języka PHP (od wersji 5.0) mamy dostęp do jej elementów.

Niestety elementy biblioteki nie są opakowane żadną przestrzenią nazw – nieco zrozumiałe, ponieważ SPL pojawił się w PHP 5.0, czyli w momencie kiedy przestrzenie nazw nie były jeszcze zaimplementowane. Drugi minus za dodatkowy prefix (Spl) przy nazwach niektórych klas (np. SplFixedArray) – moim zdaniem niepotrzebna nadmiarowość.

W tym poście skupię się na przedstawieniu części funkcji zawartych w bibliotece SPL, poza spl_autoload (i pochodnych: spl_autoload_*) oraz iterator_*. O nich napiszę osobno.

class_implements

array class_implements ( mixed $class [, bool $autoload = true ] )

Funkcja class_implements zwraca listę interfejsów, które zostały zaimplementowane przez klasę. Pierwszy argument przyjmuje nazwę klasy (wraz z przestrzenią nazwy w której się znajduje) lub jej instancję. Drugi wartość bool (domyślnie true) – oznacza ona, że do załadowania klasy (dla jej podanej nazwy) ma zostać uwzględniona funkcja magiczna __autoload.

Rezultatem wywołania będzie tablica asocjacyjna (klucz => wartość) z nazwą zaimplementowanego interfejsu (jako klucz i wartość) wraz z uwzględnieniem namespace.

W obu przypadkach wynikiem jest:

Jeśli natomiast odwołanie następuje do klasy która nie istnieje:

Otrzymamy błąd typu warning, a sama funkcja zwróci false:

class_parents

array class_parents ( mixed $class [, bool $autoload = true ] )

Funkcja class_parents zwraca listę klas nadrzędnych. Argumenty funkcji są identyczne jak w przypadku class_implements.

Rezultatem wywołania będzie tablica asocjacyjna (klucz => wartość) z nazwą klasy nadrzędnej (jako klucz i wartość) wraz z uwzględnieniem namespace. W obu przypadkach wynik jest następujący:

W momencie podania nieistniejącej nazwy klasy, interpreter PHP zachowa się identycznie jak w przypadku class_implements.

class_uses

array class_uses ( mixed $class [, bool $autoload = true ] )

Funkcja class_uses zwraca listę użytych przez klasę definicji trait. Argumenty funkcji są identyczne jak w przypadku class_implements oraz class_parents. Rezultatem jest tak jak w przypadku w.w funkcji – tablica asocjacyjna z nazwami traits. Warto pamiętać, że w tym przypadku nie są dołączane traits klas nadrzędnych. Obrazuje to przykład przedstawiony poniżej:

Wynik powyższego kodu jest następujący (identyczny dla obu wywołań):

Jeśli natomiast wywołamy funkcję class_uses dla klasy Qux, to wynikiem będzie:

W przypadku podania nieistniejącej nazwy klasy, funkcja poinformuje nas błędem podobnie jak w przypadku class_implements oraz class_parents.

spl_classes

array spl_classes ( void )

Funkcja spl_classes zwraca listę dostępnych klas biblioteki SPL. W przypadku interpretera PHP w wersji 7.1.1 (ZTS MSVC14 (Visual C++ 2015) x86) lista zwórconych klas wygląda następująco:

spl_object_hash

string spl_object_hash ( object $obj )

Funkcja spl_object_hash zwraca unikalny identyfikator (typu string) dla instancji obiektu. Id żyje tak długo jak dany obiekt. Usunięcie obiektu (za pomocą funkcji unset) powoduje, że wygenerowany dla niego identyfikator może zostać przypisany do innego obiektu.

Przykład zastosowania z uwzględnieniem klonowania oraz tworzenia instancji klasy z takimi samymi danymi:

Wynikiem jest:

Poprzedni artykułMoje wyzwanie na najbliższy miesiąc
Następny artykułPHP – Biblioteka SPL – Funkcje iterator_*
Na co dzień Software Engineer. Fascynat programowania, architektury, metodyk zwinnych i dobrych praktyk w szerokim ujęciu. Polyglot Programer kochający poznawać nowe języki jednocześnie wykorzystując ich najlepsze strony. Założyciel DevEnv i współautor podcastu Dev:Cast. After Hours czyli gdy nie pracuje i nie robi czegoś na DevEnv - podróżnik w miejsca zapomniane, pasjonat lokalnej historii. Mocno zajarany survivalem, urbexem i militariami. Jest jednym z opiekunów schronu bojowego WAWOK w Rybniku.
PODZIEL SIĘ