atelier:mitsuba

i love UI/UX, Blend, XAML, Behavior, P5, oF, Web, Tangible Bits and Physical computing. なにかあればお気軽にご連絡ください。atelier@c-mitsuba.com

Nesting level too deep – recursive dependency?

CakePHP(1.3) + PHP4 でXMLのserializeとかいろいろやってると,Nesting level too deep – recursive dependency?と延々いわれます.
これは,xmlのネストが再帰的になってて延々深くなってくよ.っていうものらしいのですが,PHP5だと通るのだけど,4だと通りません.

で,具体的な解決策ですが,
引っかかってるのが,Cakephpのcake->libs->xml.phpの384行目あたりです,

	function compare($node) {
		$keys = array(get_object_vars($this), get_object_vars($node));
		return ($keys[0] === $keys[1]);
	}

ここの比較演算子が===となってますが,PHP5だと===として扱われますが,PHP4だと===は==と扱われるため,ずーっと比較し続けます.

なので,強引ですがこうしてやると,PHP4で動作します.

	function compare($node) {
		$keys = array(get_object_vars($this), get_object_vars($node));
		return ($keys[0]);
		//return ($keys[0] === $keys[1]);
	}

要は処理だけさせて,確認の判定させてないんですね.
一応,これで狙ったとおりの動きはしてくれまうs.
実際は,PHP5とPHP4のどっちで動作しているか判定させて,処理を分けるといいですが,,,,
可能なら素直にPHP5を使いましょう.