好的,在工作中我們發現這種獲取相關數據/對象的方法是非常棒的。幫助我認識到我在這個php例子中使用的技術並命名它
權的例子,我有這個類裏面的一些相關對象:
class Country {
private $language; //$language will be an object of class Language
private $regions; //$regions will be an ARRAY of Region objects
//in the constructor i don't load regions or language
//magic method
public function __get($name) {
$fn_name = 'get_' . $name;
if (method_exists($this, $fn_name)) {
return $this->$fn_name();
} else {
if (property_exists($this, $name))
return $this->$name;
}
return $this->$name;
}
public function get_language() {
if (is_object($this->language)) return $this->language;
$this->language = new Language($params); //example
return $this->language;
}
public function get_regions() {
if (is_array($this->regions)) return $this->regions;
$this->regions = array();
$this->regions[] = new Region('fake');
$this->regions[] = new Region('fake2');
return $this->regions;
}
}
這樣的想法是:
我想國家的實例,但我不需要它的語言和地區現在。
在另一種情況下,我需要他們,所以我聲稱他們作爲屬性,魔術方法只爲我第一次檢索它們。
$country = new Country();
echo "language is". $country->language->name;
echo "this country has ". sizeof($country->regions)." regions";
這點播方法(避免相關對象的嵌套循環也)有一個名字? 也許懶加載屬性? 按需房地產?
'懶加載'是通常名稱 – Mchl 2011-02-09 14:56:08