Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 我不应该在getter和setter中使用变量吗?_Php_Variables - Fatal编程技术网

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

Php 我不应该在getter和setter中使用变量吗?,php,variables,Php,Variables,使用时是否存在任何潜在的陷阱 $this->{$name} 而不是 $this->some_array[$name] 在我的班上,能手和二传手 澄清一下,我的意思是在_get和_set方法中,而不是在调用它们时 例如: function __get($name) { ... return $this->{$name}; } 如果您想要将对象强制转换为数组,那么您将开始注意到一个差异,即ala(array)$object 这两种方法都不是“最佳”实践,根据需要做出决

使用时是否存在任何潜在的陷阱

$this->{$name}
而不是

$this->some_array[$name]
在我的班上,能手和二传手

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

例如:

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

如果您想要将对象强制转换为数组,那么您将开始注意到一个差异,即ala(array)$object


这两种方法都不是“最佳”实践,根据需要做出决定,如果这不重要,就抛硬币。

只有在无法直接访问属性时才会调用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;

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

我想我了解了您所问问题的要点

使用数组可以更容易地获取通过访问单个变量设置的所有变量,而不是将一堆类变量分散在您无法轻松获取的任何地方。我经常使用数组,因为我经常使用神奇的方法更容易地访问与对象相关的变量(
$obj->property
,而不是
$obj->array['property']

使用
$this->{$name}
有点多余,除非您在uuu get和uu set方法中运行检查。例如,不要这样做:

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

这基本上是通过使用
$obj->property='somevalue'已经实现的