PHP5.6からPHP7.1にしたら出たエラー

1.microtime「文字なの?数値なの?ハッキリしてよ!」

■エラー内容
ErrorException: A non well formed numeric value encountered in /ファイル名

意訳:型間違ってますよ
該当行コード:$time = microtime() * 1000;


■エラー原因
http://php.net/manual/ja/function.microtime.php
TRUE を指定すると、microtime() は文字列ではなく float を返すようになります。

■修正方法
数値として扱うときはmicrotime(true)にしろってことですね。

2.split「じゃあな。後のことはpreg_splitとexplodeに頼んだ」

■エラー内容
Uncaught Error: Call to undefined function split() in /ファイル名

意訳:split()なんて存在しませんぞ
該当行コード:print_r(split('/・/', $title));


■エラー原因
http://php.net/manual/ja/function.split.php
この関数は PHP 5.3.0 で 非推奨 となり、 PHP 7.0.0 で 削除 されました。

もと(PHP5.3)から非推奨ではあったけど、ついに削除されたようです。


■修正方法
正規表現を使って文字列分割したい場合→preg_split()
正規表現を使わず文字列分割したい場合→explode()

3.PHP7.1「これからは連想配列のアクセス順のこと、ちゃんと考えるね…」

■エラー内容
ErrorException: Array to string conversion in /ファイル名

意訳:そこの配列、文字列にしてよ
該当行コード:$this->$user['name']


■エラー原因
http://php.net/manual/ja/migration70.incompatible.php
変数やプロパティそしてメソッドへの間接的なアクセスを、厳密に左から右の順で評価するようになりました。

5.6とPHP7.1では違う順番でアクセスするよう変更になったからArray to string conversionがでちゃうんですね。

私「$this->$user['name'] ってどういう意味かわかる?」

PHP5.6「$this->{$user['name']} って意味だよね!」 →OKや!
PHP7.1「冷静に考えたら ($this->$user)['name'] だったわ」 →errorや!


■修正方法
今までのバージョンにおける右から左の評価を想定しているコードは、 波括弧を使って評価順を明示するように (表の中央列のように) 書き直す必要があります。

ということでエラー回避方法は{}をつけて今までと同じ優先順位を維持させること