我想知道为什么在PHP中这种行为是可能的:
class Quick {
public function add_variable($key,$value) {
$this->some[$key] = $value;
}
public function get_variable($key) {
return (isset($this->some[$key]))?$this->some[$key]:null;
}
}
$Quick = new Quick();
$Quick->add_variable("test1", 20);
var_dump($Quick->get_variable("test1"));
// Output: int(20)
我对这种行为有一些问题,我想知道为什么会这样?有什么用途。
我知道在PHP中,varibles不必声明,甚至不需要声明数组,并且:$tar["key"] = "some";
完全没问题。
但是在使用Objects时,我们会声明这些变量及其访问权限。
这里发生了什么?公众清楚......我有点困惑。任何见解?
答案 0 :(得分:0)
为什么呢?因为它是这样设计的?动态定义的属性将始终是公共的。
有什么用?一个例子是数据模型,其中可以动态地为每个列定义属性,而无需事先定义每个列。
请注意,您只是将一个属性some
创建为数组,而test1
只是一个关联数组元素;并且您可以使用魔术add_variable()
和get_variable()
__get()
和__set()
方法
答案 1 :(得分:0)
当您希望索引数据以便快速检索时,能够动态创建关联数组非常有用。下面的示例创建了一个索引数组,用于缓存资源昂贵的函数的结果。
class Quick {
public function add_variable($key,$value) {
$this->some[$key] = $value;
}
public function get_variable($key) {
return (isset($this->some[$key]))?$this->some[$key]:null;
}
public expensive_calculation($key) {
//if the results exist in cache, return from cache
$result = $this->get_variable($key);
if(!is_null($result)) {
return $result;
}
//do expensive calculation & store in $result
$this->add_variable($key,$result);
return $result;
}
}