- 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兆円あったら何に使う?