論より証拠で、サンプルコード
<?php class Sample_Object { var $prop = array(); function &getSingleton() { static $obj; if (is_null($obj)){ $obj = new Sample_Object(); $obj->id = mt_rand(); } return $obj; } function append_prop($key, $value) { if (!isset($this->prop[$key])){ $this->prop[$key] = $value; } } } $obj = Sample_Object::getSingleton(); $obj->append_prop('key', 'value'); var_dump($obj->prop, $obj->id); $obj2 = Sample_Object::getSingleton(); var_dump($obj2->prop, $obj2->id);
PHP5だとSingletonがうまく働いてくれて、
array(1) {
["key"]=>
string(5) "value"
}
int(1469367119)
- -
array(1) {
["key"]=>
string(5) "value"
}
int(1469367119)
ってなるんだけど、PHP4だと
array(1) {
["key"]=>
string(5) "value"
}
int(1270713119)
- -
array(0) {
}
int(1270713119)
ってなる。
うそーん。なんで配列だけ保ってくれない?