さて、私たちは、関連するデータ/オブジェクトをフェッチするこの方法が素晴らしいものであることを発見しました。私がこの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