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中文网其他相关文章!