PHP OOP:为什么是吸气剂?

时间:2010-01-14 19:27:58

标签: php oop

我是OOP的新手,我很难掌握getter方法的必要性。

在示例中:

class foo {
    $this->bar = "test";
}

$foo = new foo();
echo $foo->bar;

假设我使用setter方法正确验证更新后的值,这种情况有哪些潜在的缺陷?

8 个答案:

答案 0 :(得分:6)

getter方法的价值在于它允许您稍后更改实现,但保持接口相同。

答案 1 :(得分:3)

这是经典的答案:

假设您编写了一个具有表示温度的属性(以度为单位)的类,并将其包装在getTemp方法中,到目前为止,并不是那么好。现在你需要在C语言中访问它,所以你编写了一个getTempInCelcius方法来转换温度并返回新版本,以便旧方法和新方法都能工作。然后,您可以从日志中了解到,getTempInCelcius会获得比getTemp更多的调用,因此您重写了类以在内部使用C语言。如果你没有将你的温度封装在getTemp中,那么如果不改变使用你班级的所有内容,这是不可能的。使用getter你可以把逻辑填入那里,所有人都会注意到性能的提升。

答案 2 :(得分:1)

访问器方法的价值在于它们允许您访问类的特定区域,同时保持大部分区域的私有性,即封装。它还允许类签名保持稳定。

答案 3 :(得分:1)

使用getter方法有几个好处。已经提到过格式化,即使在内部更改和调试时也保持类的外部接口相同。如果你有一个计算属性,我有时也会使用它们进行缓存。

例如

class TestClass
{
    private $_cachedTestProperty;

    public function __get($varname)
    {
        switch ($varname)
        {
            case "testProperty":

                if (!isset($this->_cachedTestProperty))
                {
                    $this->_cachedTestProperty = /*calculate property*/
                }

                return $this->_cachedTestProperty;

                break;
        }
    }
}

如果你这样做,你需要记住如果对该类的另一个更改使其成为obselete,则取消设置缓存的值

他们还可以提供对受保护/私有变量的只读访问

与往常一样,无论您是想使用公共财产还是吸气剂取决于您的目标。它们并不总是更好,它是使用正确工具的一种情况

答案 4 :(得分:0)

getter / setter的一个巨大优势是,您可以将调试代码放在函数中,以便跟踪测试时更改和访问值的时间。此外,如果需要对变量进行任何格式化或处理,您可以将其放入getter(或具有不同的getter)。

答案 5 :(得分:0)

getter允许更大的灵活性,因此您可以在保持相同界面的同时更改代码在后台的工作方式。
例如,您可以更改getter,以便不仅仅为用户提供数据,而是实际将其更改为某人(解密它或其他内容)。对于用户来说,他们仍然只是在调用getter,但是你已经改变了它的工作方式。

答案 6 :(得分:0)

它为您提供更大的灵活性。代码通常最终需要做的事情比你原先计划的要多得多。例如,如果您决定要将$ bar作为计算值,但仍希望$ foo-> getBar()返回一个字符串。

function getBar()
{
    if(date('w')==0)
        return 'test';
    else
        return 'live';
}

如果你决定只想在周日返回“测试”(因为即使代码也应该休息一天)。

答案 7 :(得分:0)

拇指规则是您不应在您的结构中公开成员。成员是您班级范围内的变量。

现在,说过你应该总是将你的类变量标记为私有并为它们创建Accessor,这将为你提供一种更好的方式来揭示只需要暴露给外部世界的东西。

此外,当您使用getter和setter时,您可以控制数据,如果需要,您可以格式化输入和输出。

详细了解object oriented programmng on php.net

的概念
相关问题