[PHP-users 33707] clone()について

Yutaro Mitsui yutaro @ gauge.zapto.org
2008年 6月 26日 (木) 22:48:23 JST


三井と申します。

clone()が、5.2.5では正常に動きますが、5.1.6では正常に動きません。

コードを抜粋しますと、

protected $_relations = array();

public function fetchResultArray(&$resultArray, &$dataObjectArray,
$index = 0)
{
  $recordId = $resultArray[$index];
  $dataObjectArray[$recordId] = clone $this;
  var_dump($dataObjectArray[$recordId]->_relations[0] ===
$this->_relations[0]);
}

public function __clone()
{
  foreach ($this->_relations as &$relation) {
    $relation = clone $relation;
  }
}

という構文です。
簡単なサンプルコードで実証しようとしましたが、再現しません
でしたので、コードを抜粋して掲載します。
$this->_relationsには、オブジェクトを配列形式で格納します。

var_dumpの部分は、falseになるのを期待しますが、PHP5.1.6では、
trueになる場合があります。
どのような条件で発生するか分かりませんが、配列の最初と最後以外は、
全てtrueになります。
PHP5.2.5では、全てfalseになり問題ありません。

これは、何かの仕様でしょうか?


アドバイスいただければ、幸いです。


以上、よろしくお願いいたします。



PHP-users メーリングリストの案内