首页  >  文章  >  后端开发  >  PHP 的 __get 和 __set 魔术方法何时实际被调用?

PHP 的 __get 和 __set 魔术方法何时实际被调用?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-16 15:34:02176浏览

When Do PHP's __get and __set Magic Methods Actually Get Called?

PHP __get 和 __set 魔术方法:了解调用和限制

PHP 中的 __get 和 __set 魔术方法旨在处理对象属性访问当属性不可公开访问时进行修改。但是,关于它们的行为可能会出现一些误解。

不可访问的属性

当属性或方法不可访问时,将调用 __get 和 __set。在提供的示例中,$bar 是公共属性,默认情况下可以访问。因此,魔法方法不会被触发。

Getter 和 Setter 替代

魔法方法并不是要取代 getter 和 setter。它们提供了处理不可访问属性的后备机制。它们主要是为错误处理而设计的,不应仅仅依赖于属性访问和修改。

性能注意事项

使用魔法方法可能会导致执行速度较慢使用显式的 getter、setter 或直接属性访问。这是因为魔法方法涉及额外的方法调用和面向对象的自省。

示例修改

为了说明魔法方法的正确用法,我们将示例修改为使用私有属性:

class foo {

    private $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; // Invokes __get()
$foo->bar = 'test'; // Invokes __set()
echo "[$foo->bar]"; // Outputs [test]

在此示例中,$bar 属性现在是私有的,默认情况下无法访问。因此,在访问和修改属性时,可以正确调用 __get 和 __set 方法。

以上是PHP 的 __get 和 __set 魔术方法何时实际被调用?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn