php5.6からphp7.1に変更した時にソースを手直しした部分 | 在宅ネットでコツコツお金を稼ぐ

私が運営している他のサイトになりますが、 ずっと、php5.6で記述していました。

php5.6で全く不満がなかったので、ずっとそのままだったのですが、 最近、レンタルサーバーを新たに借りようかと考えていたところ、 レンタルサーバーにphp7系が採用されていることに気がつきました。

レンタルサーバーは、あまり新しいものを導入しないイメージがあるので、 php7系はすでに主流のもの、定番になっているのではないかと思いました。 php7はphp5系の2倍の実行速度というのが特徴のようです。

そこで、私もphp7系を導入しようと思って、まずは ローカル環境(自分のWindowsパソコン)にphp7をインストールしました。

無事インストールなども完了して、 現在、当サイト「在宅ネットでコツコツお金を稼ぐ」は、php7で記述しています。

それで、困ったのがphp5.6で書いていたプログラムです。 ローカル環境はphp7になったので、ちょっと面倒です。

今後はプログラムをphp7に対応させていきたいと考えているので、 ちょっと書きかえが必要かもしれないと思いました。

php5.6で書いていたものを、php7で実行してみると、 結構エラーの山が。ですが、意外と大きなものはありませんでした。 思ったよりも、php5.6とphp7の違いはないようです。

今回は、私が手直ししたところを忘備録として書いていきます。 基本的には、手抜きしたところを直すという感じになりました。

date関数はシングルクォーテーションやダブルクオーテーションが必要

例えば、php5.6では、

date(n);

と、シングルクオーテーションを手抜きしても通ったと思うのですが、

php7だと、

Warning: Use of undefined constant n - assumed 'n' (this will throw an Error in a future version of PHP)

と警告が出てしまいました。 ですので、手抜きせずに、

date('n');

としてシングルクオーテーションをちゃんと記述して、エラーが出なくなりました。エラーメッセージはシングルクォーテーションが表示されていますが、ダブルクオーテーションで書いてもエラーがでなくなりました。

変数を宣言していないとエラーが出ることがある。

php5.6では、変数を宣言せずに、いきなり何か処理しても大丈夫でしたが、 php7では、変数をちゃんと宣言していないと、

Notice: Undefined variable:

とエラーが出てしまいました。

これも、例えば$stringだとしたら、先に、

$string="";

などと宣言するとエラーが出なくなりました。

また、GETやPOSTで受け取った値をそのまま使おうとすると、エラーになりました。 php5.6ではそのまま使えましたが、php7では、 isset関数などで、値がない場合の処理も書いておかないといけなようです。

この変数の宣言は修正するのに手間がかかりましたが、修正後はエラーも出なくなりました。

配列のシングルクォーテーションなどもちゃんと記述

こちらも、php5.6では、例えば、

$row[number]

でも通っていましたが、

php7では、

Warning: Use of undefined constant number - assumed 'number' (this will throw an Error in a future version of PHP)

とワーニングが表示されました。

気持ちが悪いので、手抜きせずに、

$row['number']

とすると、警告が回避されます。

私のプログラムの場合は、今のところ、 このような対応だけで済みました。

エラーが出たら、その部分を修正することで、 php5.6でも、php7系でもどちらでも動くものになりました。

個別のバージョンの特別な関数を使うと、 互換性はなくなるかもしれませんが、変わった関数を使っていなければ大丈夫かもしれません。

私の場合は、どちらのバージョンでも、動くように作っておきたいと思います。

(2017/10/2:追記2018/7/27)

トップページ

その他のコラム

コンテンツ

トップページ