Poznajemy czym jest refleksja i jak ją stosować wobec istniejących już klas. Szybka, ale obowiązkowa lekcja – do dzieła!

Na początku nasza super-prosta klasa:

<?php 

class PersonRepository {
    public function __construct(private PDO $pdo) {}
}

Teraz tworzymy reflektor:

$reflector = new ReflectionClass(PersonRepository::class);
print_r($reflector);
//ReflectionClass Object ( [name] => PersonRepository ) 
//ReflectionMethod Object ( [name] => __construct [class] => PersonRepository )

Pobierzmy sam konstruktor:

$constructor = $reflector->getConstructor();
print_r($constructor);
//ReflectionMethod Object ( [name] => __construct [class] => PersonRepository )

Sprawdźmy, czy konstruktor istnieje:

if(!is_null($constructor))
    echo "constructor is not null";
//constructor is not null

Pobierzmy parametry konstruktora:

$parameters = $constructor->getParameters();
print_r($parameters);
//Array ( [0] => ReflectionParameter Object ( [name] => pdo ) )

Pobierzmy typ pierwszego parametru:

$type1 = $parameters[0]->getType();
echo (string) $type1;
// PDO

Sprawdźmy, czy jest typem wbudowanym (jak string, int) czy złożonym:

if(!$type1->isBuiltin())
echo (string) $type1 . " is not a builtin type";
//PDO is not a builtin type

Na razie może się to nie wydawać szczególnie przydatne, ale będzie. To były tylko podstawy narzędzia, które niedługo użyjemy.