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!

Back to Blog

相关文章

阅读更多 »

PHP 属性:SensitiveParameter

如果你没有使用它,风险已经实时存在。SensitiveParameter https://www.php.net/manual/en/class.sensitiveparameter.php 属性是 PHP 8 中引入的……