TOP書籍連動> array_merge(): Argument #1 is not an array
まるごと PHP!
まるごと PHP!

Part6:PHP4からPHP5への移行のポイント

著者:月宮紀柳(TSUKIMIYA, Kiryu)   2005/4/13
前のページ  1  2
array_merge(): Argument #1 is not an array

   array_merge()関数の仕様が変更され、引数に配列のみ受け付けるようになりました。もし引数に配列以外が指定されていた場合、PHP5では警告が発生します。対処法としては、かなり乱暴ですが次のように無理やりキャストしてしまうという方法があります。
array_merge((array)$foo, (array)$bar)
strrpos()とstrripos()の仕様変更

   strrpos()関数とstrripos()関数の仕様が変わり、2つ目の引数で指定された文字列全体を検索するようになりました。この変更により、検索する文字に1文字だけ渡さず文字列をそのまま渡している場合、期待した動作はせず、文字列が見つからなかった旨のfalseが返されることになります。代わりにsubstr()関数などを使い、検索したい文字を切り出して渡すようにしましょう。


オブジェクト周りの変更

   PHP5ではオブジェクト周りの実装が大きく変わりました。たとえば次のようなコードは、PHP5ではコピーにならずに参照になります 。

$object2 = $object;

   PHP5に移行しようとしているコードに「オブジェクトがコピーされること」を期待して上記のような式が書かれていた場合、正常に動作しなくなります。オブジェクトをコピーするには、PHP5から導入されたcloneを使い、次のように記述します。

$object2 = clone $object;

   ただ、プロジェクトが大きければ大きいほど修正個所も多くなってしまい面倒です。そのようなときには、php.iniやini_set()関数を使い、zend.ze1_compatibility_modeをOnにしましょう。このオプションもPHP5から追加されたもので、これを設定するとオブジェクトに関する扱いがPHP4のときと同じようになります。


まとめ

   ほかにも変更点はありますが、筆者がよく引っかかったのは以上のようなポイントでした。これらの変更を行えば、たいていのPHP4用アプリケーションをPHP5上でも動かすことが可能になります。また、本稿の内容を考慮にいれてコーディングを行えば、「環境がPHP5に変わっても問題のないコード」を書くことができます。

   正直なところ、PHP5はまだリリースされたばかりで問題も多く、現在稼働中のアプリケーションを移行すべきかどうかと聞かれたらほぼ間違いなく「No」と答えるでしょう。しかし、PHP5で導入された機能の中には魅力的な機能が多いのもまた事実です。まもなく、内部処理が見直され動作速度が速くなったPHP5.1のβ版がリリースされるという話もあり、PHP5が積極的に採用される事も多くなると思われます。まずはテスト環境にPHP5を導入し、本格採用を検討してもいいのではないでしょうか。

前のページ  1  2


月宮紀柳
著者プロフィール
著者:月宮紀柳
PHP3の頃から習得コストの安さが気に入り、Webシステムのメイン環境として選択。現在はアーキテクトとしてPHPを使った中〜大規模案件への対応を行っている。


INDEX
Part6:PHP4からPHP5への移行のポイント
  はじめに
array_merge(): Argument #1 is not an array