【问题标题】:Why would I bother using accessor functions? [duplicate]为什么我会费心使用访问器函数? [复制]
【发布时间】: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


【解决方案1】:

1) 它只是让您控制如何以及谁可以访问该属性。 (使用访问器时,该属性应该是私有的。)

2) 您可以根据访问者和访问方式来更改值

3) 您可以在访问某个属性时通知某人

还有更多...

【讨论】:

  • 非常感谢。随着我阅读更多,它会变得更清晰:)
猜你喜欢
  • 2012-05-17
  • 2023-03-24
  • 2017-07-11
  • 2017-02-28
  • 2016-03-16
  • 1970-01-01
  • 2021-07-04
  • 2018-08-29
  • 1970-01-01
相关资源
最近更新 更多