PHP4からPHP5への移行:オブジェクトの代入

最終更新日時:2014-05-19 18:08:56
PHP

概要


PHP4 から PHP5 への移行において様々な問題がありますが、知らないと一番はまるのが、PHP4 と PHP5 では、オブジェクトの代入の仕様が異なることだと思います。

例えば、A というオブジェクトがあり、

 B = A;


と B に A を代入するという文があるとします。
PHP4 であれば、B には A のオブジェクトの内容がコピーされたオブジェクトが代入されます。
これに対して、PHP5 では、B には、A へのハンドルがコピーされます。
つまり、A と B とは異なる値を持っていますが、実体となるオブジェクトは同一のものを指しています。
従って、B.setval('...') のような感じで B が参照しているオブジェクトを変更すると、A が参照しているオブジェクトも変更されます。
他の言語のオブジェクトのイメージと同様ですね。

つまるところ、PHP4 の時のオブジェクトの代入の仕様が変だった、、、ということになり、PHP5 ではそれを改善したわけですが、それがアダとなってしまい、移行時には問題が出るということになります。


解決策


PHP5 では、clone というオブジェクトのコピーが得られる関数が用意されたので、代入ではなく clone を使うようにします。

 B = clone A;


オブジェクトの代入を行っているところは片っ端から clone に書き換えていく必要があります(^_^;


お問い合わせは 掲示板 にて。