最近久々にサーバーのリプレースに伴ってプログラムをphp5からphp7に上げる必要があり、再度調べたりしたので、今まであった修正を今後のためにまとめておきます。
ちなみに以下のような状況です。
- 複数クライアントに展開しているASPの保守を担当
- フレームワークは基本的にはfuelphpを使用、でも他社作成のコードの保守を行うこともある
- 未だphp5環境のサーバーで動かしているクライアントがいるので、php5環境でも動作は保証したい
- でも、一部php7に上げているクライアントがいるのでphp7対応にする必要がある
- php5.4系からのアップグレードが多い
新しいオブジェクトを参照渡しで代入できない
自社開発のコードでは出会ったことがないですが、外部ライブラリ使っているとよくあります。
以下のようなコード。
class C {}
$c =& new C;
Parse error: syntax error, unexpected 'new' (T_NEW) in *****
と怒られます。
下位互換性のないその他の変更に記載があります。
countの引数にcountable ではない型を渡せない
これも自社開発のコードでは発生した記憶がないです。
count(null);
とかするとWarning: count(): Parameter must be an array or an object that implements Countable
と怒られます。
php7.2の変更点に記載があります。
cURLでファイルをポストする時のオプションが違う
正確には、php5.6以上かそれ未満かでオプションが違う、というものです。
5.4系でも動くように作成したら、php7環境で動きませんでした。
以下の記事を参考にして対応しました。
こんな機会はなかなか無いとは思いますが・・・。
(参考)PHP: VER5.6以降 cURLでファイルをポストする
fuelphp1.8の場合に必要だった作業(おまけ)
1.8.2では対応されています。
(参考)PHP7.2でFuelPHPがエラーになるのを何とかする
PHP 5.4 系だと発生するエラー(おまけ)
empty()の引数に関数を渡す
php5.4以前に以下のような式を書くとエラーで怒られます。
php7からさわり始めた人はこのエラーに遭遇しやすいかも。
empty(trim($name))
emptyのパラメーターの説明にも記載があります。
empty() が任意の式に対応にもあるように、php5.5から引数渡せるようになってます。