__get 和 __set 真的只是 PHP 中重载 Getter 和 Setter 吗?

Barbara Streisand
发布: 2024-11-12 14:34:02
原创
749 人浏览过

Are __get and __set Really Just Overloading Getters and Setters in PHP?

魔术方法:揭示 PHP 中 __get 和 __set 的真正用途

PHP 中神秘的 __get 和 __set 魔术方法引起了开发人员的兴趣,让他们想知道他们的预期功能。直到最近,人们还认为这些方法可以轻松重载 getter 和 setter。然而,现实却描绘出不同的画面。

理解魔法方法的真正作用

与流行的假设相反,__get 和 __set 主要设计用于处理直接方法的情况或由于可访问性限制而限制财产访问。具体来说:

  • __set 在尝试写入不可访问的属性时被调用。
  • __get 在从不可访问的属性读取数据时被使用。

示例

考虑以下代码片段:

class foo {
    public $bar;
    public function __get($name) {
        echo "Get:$name";
        return $this->$name;
    }

    public function __set($name, $value) {
        echo "Set:$name to $value";
        $this->$name = $value;
    }
}

$foo = new foo();
echo $foo->bar; // Fails
$foo->bar = 'test'; // Fails
登录后复制

在这种情况下,不会调用 __get 和 __set 方法,因为 $bar 属性是可公开访问的。 PHP 手册明确指出:“魔术方法不能替代 getter 和 setter。它们只是允许您处理方法调用或属性访问,否则会导致错误。”

性能影响

需要注意的是,魔术方法会带来性能成本。调用它们明显比使用正确的 getter、setter 或直接方法调用慢。因此,应将它们保留在需要处理不可访问问题的特殊情况下。

结论

虽然 __get 和 __set 似乎是 getter 和 setter 重载的便捷解决方案,它们的真正目的在于管理财产访问限制。了解它们的确切作用对于有效的 PHP 代码开发至关重要。通过掌握这些知识,您可以避免不必要的性能损失并确保代码稳定性。

以上是__get 和 __set 真的只是 PHP 中重载 Getter 和 Setter 吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板