Sobes.tech
Middle+

Gde se primenjuje refleksija u PHP-u?

sobes.tech АИ

Одговор од АИ

Refleksija u PHP se primenjuje u sledećim slučajevima:

  • Studiranje strukture klasa i objekata tokom izvršenja. Ovo omogućava dobijanje informacija o svojstvima, metodama, konstantama, anotacijama (u nekim implementacijama) klase bez potrebe da se zna njena struktura unapred.
  • Dinamičko kreiranje objekata i pozivanje metoda. Možete kreirati instance klasa i pozivati njihove metode koristeći nizove sa imenima klasa i metoda.
  • Implementacija okvira i biblioteka. Okviri često koriste refleksiju za automatsku obradu podešavanja, rutiranje, injekciju zavisnosti i drugih aspekata.
  • Testiranje. Refleksija može biti korišćena za pristup privatnim i zaštićenim svojstvima/metodama u svrhu testiranja.
  • Serijalizacija i deserijalizacija objekata. Refleksija može biti korišćena za automatsko čuvanje i obnavljanje stanja objekata.
  • Obrada anotacija (atributa). U PHP 8+ refleksija se koristi za dobijanje informacija o atributima koje su deklarisane iznad klasa, metoda, svojstava i funkcija.

Primer dobijanja informacija o metodama klase:

<?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 "Metod: " . $method->getName() . "\n";
    echo "Vidljivost: " . ($method->isPublic() ? 'public' : ($method->isProtected() ? 'protected' : 'private')) . "\n";
    // ... može se dobiti informacija o parametrima, tipu povratne vrednosti itd.
}

Primer dinamičkog kreiranja objekta i poziva metode:

<?php

class AnotherClass
{
    public function greet(string $name): string
    {
        return "Zdravo, " . $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; // Ispisaće: Zdravo, Svet!