2014-12-27 82 views
0

我想知道为什么这种行为在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变量不必声明,甚至不是阵列和:$tar["key"] = "some";是完全没问题的。 但是,当使用对象时,我们正在声明这些变量及其访问权限。 这里发生了什么?它的公众清楚......我有点困惑。有什么见解?

回答

0

为什么?因为它是这样设计的?动态定义的属性将始终是公开的。

有什么用?一个例子是数据模型,其中可以为每个列动态定义一个属性,而无需事先定义每一列。

请注意,你只是创建一个属性some作为一个数组,没有什么聪明的test1这是一个简单的关联数组元素;当你想索引你的快速检索数据,你add_variable()get_variable()方法可以使用魔法__get()__set()

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; 
    }  
} 
相关问题