【发布时间】:2014-07-27 10:08:16
【问题描述】:
这是访问函数:
<?php
class classname
{
public $attribute;
function __get($name)
{
return $this->$name;
}
}
$a = new classname;
$a->attribute = "Anna";
$name = $a->attribute;
echo $name;
?>
这只是一个没有访问器函数的普通类:
<?php
class classname
{
public $attribute;
}
$a = new classname;
$a->attribute = "Anna";
$name = $a->attribute;
echo $name;
?>
它们都提供相同的结果。我不明白,在什么情况下我应该使用访问器函数?
【问题讨论】:
-
您只需要非公共属性的访问器。现在有些人会争辩说对象的所有属性都应该是私有的/受保护的。当请求一个不可访问的属性时,会调用魔术 getter 函数。
-
来自the manual:__get() 用于从不可访问属性中读取数据。
-
在您的示例中,您没有使用 __get 函数!如果有优先的公共成员变量。 __get 在没有匹配的可访问属性时运行。
-
还有另一个问题stackoverflow.com/questions/6741595/php-get-set-methods 更适合作为重复的 IMO。链接为重复的问题通常是关于 getter/setter 的。在 php 中使用 __get()/__set() 是一个稍微不同的问题(我使用 gettters 和 setter 并尽量避免使用 __get,除非我真的需要它)
标签: php class attributes accessor