Glossary

PHP Attributes

Attributes (PHP 8.0) are structured metadata added to classes, methods, properties, and parameters. They replaced docblock annotations (@Route, @Inject) with native syntax that is validated by static analysis.

Syntax

#[Attribute]
class Route {
  public function __construct(
    public string $path,
    public string $method = 'GET',
  ) {}
}

#[Route('/users', 'GET')]
#[Middleware(AuthMiddleware::class)]
class UserController {
  #[Route('/users/{id}')]
  public function show(int $id): Response { ... }
}

Reading attributes

$ref = new ReflectionClass(UserController::class);
$attrs = $ref->getAttributes(Route::class);
foreach ($attrs as $attr) {
  $route = $attr->newInstance(); // Route('/users', 'GET')
}

Where used

DI containers, routers, ORM mapping, validators, serialisers. Symfony and Doctrine use attributes extensively instead of XML/YAML configuration.