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'已经实现的你能解释一下这两段代码是如何相互关联的吗?一个似乎是标量属性,而另一个是数组属性项