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 常量。
我正在尝试了解 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 常量。