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.