Usare gli Attributes in PHP

Mattepuffo's logo
Usare gli Attributes in PHP

Usare gli Attributes in PHP

Da PHP 8 abbiamo la possibilità di usare gli Attributes, che sostanzialmente fungono da decorators/annotations.

Solo che non ho trovato banale il loro uso, quindi cerco di farvi un esempio basico esplicativo.

In pratica dobbiamo segnare come Attribute una classe che poi verrà "richiamata" da un'altra classe o da un metodo (cosa che farò nell'esempio).

Quindi:

#[Attribute]
class CheckProtectedAttribute {
  private string $isProtected;

  public function __construct(string $isProtected) {
    $this->isProtected = $isProtected;
  }
}

In pratica al costruttore passiamo un solo valore, che poi contrelleremo nella sua implementazione.

A questo punto:

class Foo {
  #[CheckProtectedAttribute('true')]
  public function funcProtetta() {
    echo 'protetta';
  }

  #[CheckProtectedAttribute('false')]
  public function funcNonProtetta() {
    echo 'non protetta';
  }

}

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

foreach ($methods as $method) {
  foreach ($method->getAttributes() as $attr) {
    foreach ($attr->getArguments() as $arg) {
      if ($arg === 'true') {
        echo '-ESEGUIRE IL LOGIN-';
      } else {
        $reflectionMethod = new ReflectionMethod('Foo', $method->getName());
        $reflectionMethod->invoke($reflector->newInstance());
      }
    }
  }
}

Come vedete la classe Foo ha due metodi, e su entrambi richiamiamo il nostro attributo passando due valori diversi.

Sotto usiamo la reflection per leggere i vari metodi della classe, e per ogni metodo cercare l'attributo ed il suo valore.

Enjoy!


Condividi

Commentami!