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)にしろってことですね。
1 2 3 4 5 | // PHP5.6 $time = microtime() * 1000; // PHP7.1 $time = microtime(true) * 1000; |
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()
1 2 3 4 5 6 7 8 9 10 | $title = "ア・イ・シ・テ・ルのサイン" ; // PHP5.6 var_dump(split( '/・/' , $title )); // PHP7.1(正規表現を使用) var_dump(preg_split( '/・/' , $title )); // PHP7.1(正規表現を不使用) var_dump( explode ( '・' , $title )); |
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や!
■修正方法
今までのバージョンにおける右から左の評価を想定しているコードは、 波括弧を使って評価順を明示するように (表の中央列のように) 書き直す必要があります。
ということでエラー回避方法は{}をつけて今までと同じ優先順位を維持させること
1 2 3 4 5 | // PHP5.6 $this -> $user [ 'name' ] // PHP7.1 $this ->{ $user [ 'name' ]} |