あなたの質問を理解したように、パブリック変数をオーバーロードできるかどうかを知りたがっていました。
__get($name) マジック メソッドについては既にご存知でしたよね? または、 getName()、getAge()、および *getStatus_Indicator()*について話していたのかもしれません。
いずれにせよ、パブリック プロパティとして魔法のメソッドを利用することはできません。
概念実証のためにそれらをリストします。
例 1
<?php
class Dummy {
public $name;
public $age;
public $status_indicator;
public function __construct() {
foreach($this AS $name => $value) {
$this->$name = new LazyLoader($this, $name);
}
}
}
class LazyLoader {
protected $object;
protected $name;
public function __construct($object, $name) {
$this->object = $object;
$this->name = $name;
}
public function load() {
/* find the necessary $data somehow */
$name = $this->name;
$this->object->$name = $data;
/*
after the first call to LazyLoader::load
the property no longer points to a LazyLoad
object, but to the intended value
*/
}
public function __toString() {
return($this->load());
}
}
?>
例 2
<?php
class LazyCollectionWrapper extends ArrayObject {
public function __construct($objects = array()) {
parent::__construct($objects);
}
public function offsetGet($offset) {
$this->collection[$offset]->lazyLoad();
return($this->collection[$offset]);
}
}
class Dummy {
public $name;
public $age;
public $status_indicator;
public function lazyLoad() {
/* load stuff here */
}
}
?>
例 3
<?php
class Dummy {
public function __get() {
/*
load stuff here because undefined
properties are caught by __get too
*/
}
}
?>
例 3 は構造についてはあまり情報がありませんが、メモリに関する限り、これが最良の方法です。私たちは遅延ロードの話をしていました...つまり、役に立たないものをメモリにロードしませんよね?
私がこれを言うのは:
class x { protected $var1 = array(); protected $var2 = 0.0; }
よりも多くのメモリを消費します
class x { protected $var1; protected $var2; }
そしてそれ以上に
class x { }
何百万ものオブジェクトを構築し、ピーク時のメモリ使用量を比較してテストしました。