我不应该在getter和setter中使用变量吗?

时间:2012-02-24 02:07:33

标签: php variables

使用

是否存在任何潜在的陷阱
$this->{$name}

而不是

$this->some_array[$name]

在我班上的getter和setter?

澄清一下,我的意思是在__get和__set方法中,而不是在调用它们时。

例如:

function __get($name) {
  ...
  return $this->{$name};
}

3 个答案:

答案 0 :(得分:2)

只有在无法直接访问该属性时才会调用getter / setter。动态设置未在类本身中定义的属性时,将使用public可见性创建该属性。这意味着它可以从任何地方访问,访问它时不会调用getter / setter。

为了说明,下面只输出一次“设置栏”:

class Foo {

    public function __set($name, $val) {
        echo "setting $name\n";
        $this->$name = $val;
    }

}

$foo = new Foo;
$foo->bar = 'baz';
$foo->bar = 42;

这可能不是你想要的东西。此外,它允许任何人更改对象的任何属性,这可能也不是您想要的。

答案 1 :(得分:0)

如果您想将对象转换为数组,ala(数组)$ object

,您将开始注意到差异

两种方式都不是“最佳”的做法,根据需要做出决定,如果这无关紧要,可以掷硬币。

答案 2 :(得分:0)

我想我得到了你所要求的要点。

使用数组可以更轻松地获取通过访问单个变量设置的所有变量,而不是将一堆类变量分散到无法轻松获取的地方。我使用数组作为很多因为我经常使用魔术方法来更轻松地访问与对象相关的变量($obj->property而不是$obj->array['property'])。

除非您在__get和__set方法中运行检查,否则使用$this->{$name}有点多余。例如,不要做这样的事情:

function __set($property, $value) {
    $this->{$property} = $value;
}

这基本上是通过使用$obj->property = 'some value'; ...

实现的