PHP 8 属性构造函数调用

PHP 8 Attribute constructor calling

我正在尝试了解 PHP 中的属性是如何工作的。但是当我写一些代码时(我有 XAMPP 并且安装了 PHP 8 支持),它似乎不起作用(屏幕上没有消息)。它需要额外的配置才能工作吗?

use Attribute;

class MyAttribute {
    public function __construct($message) {
        // I want to show this message when using MyAttribute
        echo $message;
    }
}

#[MyAttribute('hello')]
class SomeClass {
    // ...
}

这段代码不应该向我显示“你好”消息吗?或者我不明白什么?它没有显示任何内容。

属性只能通过反射访问,这里是例子:

// you have to specify that your custom class can serve as attribute
// by adding the build-in attribute Attribute:

#[Attribute] 
class MyAttribute {
    public function __construct($message) {
        // I want to show this message when using MyAttribute
        echo $message;
    }
}

#[MyAttribute('hello')]
class SomeClass {
    // ...
}

// first you need to create Reflection* in order to access attributes, in this case its class
$reflection = new ReflectionClass(SomeClass::class);
// then you can access the attributes
$attributes = $reflection->getAttributes();
// notice that its an array, as you can have multiple attributes
// now you can create the instance
$myAttributeInstance = $attributes[0]->newInstance();

一些文档:ReflectionClass ReflectionAttribute

还有其他 Reflection* classes,例如:方法、函数、参数、属性、class 常量。