tohokuaikiのチラシの裏

技術的ネタとか。

PHP4のObjectのプロパティがいまいち予想通りに動いてくれない件

論より証拠で、サンプルコード

<?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)

ってなる。

うそーん。なんで配列だけ保ってくれない?