Open1
Emacs PHP ModeでPHP 8の #[Attribute] をサポートする
PHP 8 Syntax
いろいろあって、PHP: rfc:shorter_attribute_syntax_changeの投票により #[Attributes]
形式になった。
#
はPHP7では単なるコメントなので(改行位置を選べば)後方互換性を崩さずに導入できるという利点がある。
<?php
#[Attribute]
class MyAttr
{
private array $args;
public function __construct(...$args)
{
$this->args = $args;
}
public function getArgs(): array
{
return $this->args;
}
}
#[MyAttr('class', 1)]
class Target
{
#[MyAttr('method', 2)]
public function method(#[MyAttr('arg', 3)] $arg)
{
}
}
$ref = new ReflectionClass(Target::class);
foreach ($ref->getAttributes(MyAttr::class) as $attr) {
var_dump($attr->newInstance());
}
$ref_method = $ref->getMethod('method');
foreach ($ref_method->getAttributes(MyAttr::class) as $attr) {
var_dump($attr->newInstance());
}
$ref_param = $ref_method->getParameters()[0];
foreach ($ref_param->getAttributes(MyAttr::class) as $attr) {
var_dump($attr->newInstance());
}