PHP 代码片段:属性钩子
发布: (2026年1月10日 GMT+8 01:37)
2 min read
原文: Dev.to
Source: Dev.to
PHP 8.5 中的属性钩子
PHP 8.5 引入了 属性钩子,允许你直接在属性上附加 getter 和 setter 逻辑。
class Berry
{
public string $name {
get => ucfirst($this->value);
set => trim($value);
}
}
$berry = new Berry();
$berry->name = " strawberry ";
echo $berry->name; // Strawberry
get 钩子在读取属性时将首字母大写,而 set 钩子在写入属性时去除空白。无需单独的方法,使逻辑紧贴属性定义。
PHP 8.5 之前的实现方式
在属性钩子出现之前,需要使用私有属性并配合显式的 getter 和 setter 方法:
class Berry
{
private string $name;
public function getName(): string
{
return ucfirst($this->name);
}
public function setName(string $value): void
{
$this->name = trim($value);
}
}
$berry = new Berry();
$berry->setName(" blueberry ");
echo $berry->getName(); // Blueberry
结果相同,但代码更冗长,转换逻辑与属性声明分离。
属性钩子的优势
- 减少样板代码 – 不需要单独的 getter/setter 方法。
- 提升可读性 – 转换逻辑就写在属性定义处。
- 更易维护 – 逻辑的修改只需在一个地方完成。
- 更简洁的类设计 – 减少了私有属性和公共方法的杂乱。
欢迎使用现代化的 PHP!