- 2009-02-23 月 19:02:00
- PHP
PHPの基礎体力でお世話になっているレンタルサーバー屋さんが
PHP5環境を用意してくれたので、只今PHPの基礎体力をPHP5に移行作業中です。
PHP4とPHP5で違うところをメモっておきます。
PHP4 では、オブジェクトを複製する時は = で、
リファレンスの時は =& 演算子を使いました。
/** * PHP4 */ $object1 = new stdClass; // $object2を$object1の複製で初期化 $object2 = $object1; // $object3を$object1のリファレンスで初期化 $object3 =& $object1;
これがPHP5になると、オブジェクトを複製する時は = clone で
リファレンスの時は = となるので
複製のつもりで代入演算子を使ってるところは = clone に直す必要あり。
/** * PHP5 */ $object1 = new stdClass; // $object2を$object1の複製で初期化 $object2 = clone $object1; // $object3を$object1のリファレンスで初期化 $object3 = $object1;
ちなみに、PHP5で $object3 =& $object1 とした場合は、
$object3 = $object1 と同じ挙動のようです。
$object1 = new stdClass; $object2 = clone $object1; $object3 = $object1; $object4 =& $object1; $object5 = $object2; debug_zval_dump($object1); debug_zval_dump($object2); debug_zval_dump($object3); debug_zval_dump($object4); debug_zval_dump($object5);
上の出力結果が下です。
こんな時のデバッグプリントは debug_zval_dump が役立ちます。
object(stdClass)#1 (0) refcount(1){
}
object(stdClass)#2 (0) refcount(3){
}
object(stdClass)#1 (0) refcount(2){
}
object(stdClass)#1 (0) refcount(1){
}
object(stdClass)#2 (0) refcount(3){
}
$object =& new stdClass;
それとインスタンスの生成時↑のような書き方をすることがあったけど
= でリファレンスが得られるので、PHP5では & が不要ってことになる。
- 新しい: SEO対策が大嫌い
- 古い: 2兆円あったら何に使う?
コメント:0
トラックバック:0
- この記事のトラックバック URL
- http://beatnik.jp/blog/archives/87/trackback
- トラックバックの送信元リスト
- オブジェクトに対する代入演算子の挙動の違い - PHPで翻訳三昧 より
