Introspekcja to pojęcie oznaczające zdolność aplikacji do zarządzania własnym kodem. Pozwala zatem pobierać informacje na temat klas,interfejsów i funkcji w trakcie działania programu. Termin ten jest utożsamiany z mechanizmem refleksji. W zależności od języka programowania, oba pojęcia mogą się subtelnie różnić. Z reguły mechanizm odbić (reflection) rozszerza introspekcję, oferując znacznie większe spektrum możliwości (dostarczając bardziej szczegółowych informacji, czasami dając szansę na zmianę semantyki, czy też zachowania metod, funkcji itp.). Refleksja stanowi doskonałe narzędzie inżynierii odwrotnej i jest jedną z technik programowania generycznego.
Introspekcja w PHP
Po krótkim wstępie teoretycznym przechodzimy do praktycznego przykładu, wykorzystującego introspekcję. Na początku przykładowa klasa pełniąca rolę królika doświadczalnego.
class Rabbit {
public $name;
public function PrintClassName () {
echo __CLASS__;
}
public function PrintRabbitName () {
echo $this->name;
}
}
Pobierzmy podstawowe informacje o tej klasie. Sposób pierwszy – na podstawie nazwy klasy:
var_dump (class_exists('Rabbit'));
var_dump (get_class_methods('Rabbit'));
var_dump (method_exists('Rabbit','PrintRabbitName'));
var_dump (property_exists('Rabbit','name'));
Sposób drugi – korzystając z instancji klasy:
$obj = new Rabbit(); var_dump (get_class_methods($obj)); var_dump (method_exists($obj,'PrintRabbitName')); var_dump (property_exists($obj,'name'));
Omówmy użyte powyżej funkcje:
- class_exists(string $name) – zwraca bool informując czy klasa została zdefiniowana czy też nie. UWAGA! Funkcja posiada opcjonalny parametr, o którym można przeczytać w dokumentacji.
- get_class_methods(mixed $class) – zwraca array zawierającą wszystkie metody klasy przekazanej w parametrze (instancja lub jej nazwa). Jeśli wystąpił błąd funkcja zwróci NULL.
- method_exists(mixed $class, string $method) – zwraca bool informując czy istnieje metoda $method dla klasy przekazanej w parametrze $class (instancja lub jej nazwa).
- property_exists(mixed $class, string $property) – zwraca bool informując czy istnieje właściwość $property dla klasy przekazanej w parametrze $class (instancja lub jej nazwa).
Oczywiście to tylko wybrane funkcje. Zainteresowanych zapraszam TUTAJ. Źródło przykładu zamieszczonego w tym poście znajdziecie TUTAJ. O refleksji pisałem już trochę TUTAJ.
2 Odpowiedzi : “introspekcja”


Bardzo fajną funkcją języków interpretowanych jest to, że zwykle zawierają narzędzia do introspekcji kodu. Używam ich rzadko, ale bez var_dump()’a naprawdę PHP nie byłby tym samym językiem.
BTW. Podziwiam Ciebie za jedną rzecz – opisujesz w fajny sposób różne rzeczy, które ja bym pominął jako banalne. To się chwali, oby tak dalej!
Dzieki za ciekawy blog