PHP4からPHP5への移行:オブジェクトの代入
最終更新日時:2014-05-19 18:08:56
PHP
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 に書き換えていく必要があります(^_^;