Sobes.tech
Middle+

Kde sa v PHP používa reflexia?

sobes.tech AI

Odpoveď od AI

Reflexia v PHP sa používa v týchto prípadoch:

  • Štúdium štruktúry tried a objektov počas behu. To umožňuje získavať informácie o vlastnostiach, metódach, konštantách, anotáciách (v niektorých implementáciách triedy) bez potreby poznať jej štruktúru vopred.
  • Dynamické vytváranie objektov a volanie metód. Môžete vytvárať inštancie tried a volať ich metódy pomocou reťazcov s názvami tried a metód.
  • Implementácia rámcov a knižníc. Rámce často používajú reflexiu na automatické spracovanie nastavení, routovanie, zavádzanie závislostí a ďalších aspektov.
  • Testovanie. Reflexia môže byť použitá na prístup k súkromným a chráneným vlastnostiam/metódam na účely testovania.
  • Serializácia a deserializácia objektov. Reflexiu možno použiť na automatické uloženie a obnovenie stavu objektov.
  • Spracovanie anotácií (atribútov). V PHP 8+ sa reflexia používa na získanie informácií o atribútoch, ktoré sú deklarované nad triedami, metódami, vlastnosťami a funkciami.

Príklad získania informácií o metódach triedy:

<?php

class MyClass
{
    private $property;

    public function publicMethod(string $param): int
    {
        return 1;
    }

    protected function protectedMethod()
    {
        // ...
    }
}

$reflector = new \ReflectionClass(MyClass::class);
$methods = $reflector->getMethods();

foreach ($methods as $method) {
    echo "Metóda: " . $method->getName() . "\n";
    echo "Viditeľnosť: " . ($method->isPublic() ? 'public' : ($method->isProtected() ? 'protected' : 'private')) . "\n";
    // ... možno získať informácie o parametroch, návratovom type a pod.
}

Príklad dynamického vytvorenia objektu a volania metódy:

<?php

class AnotherClass
{
    public function greet(string $name): string
    {
        return "Ahoj, " . $name . "!";
    }
}

$className = 'AnotherClass';
$methodName = 'greet';
$paramValue = 'Svet';

$reflector = new \ReflectionClass($className);
$object = $reflector->newInstance();

$method = $reflector->getMethod($methodName);
$result = $method->invoke($object, $paramValue);

echo $result; // Vypíše: Ahoj, Svet!