PHP7.1にしたときの WordPress Plugin 対応ログ。
プラグインcrayon-syntax-highlighterからNoticeが出ます!
logPHP Notice: A non well formed numeric value encountered in .../plugins/crayon-syntax-highlighter/crayon_formatter.class.php on line 118
PHP Notice: A non well formed numeric value encountered in .../plugins/crayon-syntax-highlighter/crayon_formatter.class.php on line 119
関係するコードを見てみます。
crayon_formatter.class.php 113,114 行目$_font_size = $hl->setting_val(CrayonSettings::FONT_SIZE); //12
$font_size = $_font_size . 'px !important;'; // "12px !important"
crayon_formatter.class.php 変更前 118,119行目$toolbar_height = $font_size * 1.5 . 'px !important;';
$info_height = $font_size * 1.4 . 'px !important;';
原因は、文字列の $font_size ( "12px !important" ) に掛け算をしているため。
※ PHP7.1 から、数値形式ではない文字列を使って数値を期待する演算をすると、E_WARNING あるいは E_NOTICE レベルのエラーが発生するようになりました。
よって、文字列にする前の、$_font_size を使うように変更。
crayon_formatter.class.php 変更後$toolbar_height = $_font_size * 1.5 . 'px !important;';
$info_height = $_font_size * 1.4 . 'px !important;';
A non well formed numeric value encountered... が出たら、stringを数値計算していなかどうかチェックしましょう!
* * *
というわけで、以下、PHP7.1へマイナーアップする際の参考に。
PHP 7.1 移行
新機能
- ■ nullable な型
型宣言で、指定した型だけでなくNULLもokな nullable 指定ができるようになりました。型の前にクエスチョンマークをつけます。 - ■ void 関数
void 導入。void 関数から NULL を返すことはできません。関数の返り値は NULL と評価されます。 - ■ Symmetric array destructuring
配列の短縮構文 ([]) を使って、代入用に配列の値を取り出せるようになりました (foreach でも使えます)。
$data = [
[1, 'Tom'],
[2, 'Fred'],
]; - ■ クラス定数のアクセス範囲指定
- ■ iterable 擬似型
- ■ 例外処理における複数の例外の catch
- ■ list() におけるキーのサポート
- ■ 負の文字列オフセットのサポート
- ■ ext/openssl における AEAD のサポート
- ■ Closure::fromCallable() による callables から Closure への変換
- ■ 非同期シグナルハンドリング
- ■ ext/curl における HTTP/2 サーバープッシュのサポート
下位互換性のない変更点
- ■ 関数に渡す引数が少ない場合の挙動
これまでのバージョンでは、ユーザー定義の関数に渡す引数が足りない場合は warning が発生していました。PHP 7.1 以降では、warning ではなく Error 例外が発生するようになります。 - ■ スコープを調べる関数の動的呼び出しの禁止
~影響を受ける関数~
assert() - 最初の引数に文字列を渡した場合
compact()
extract()
func_get_args()
func_get_arg()
func_num_args()
get_defined_vars()
mb_parse_str() - 引数が一つだけの場合
parse_str() - 引数が一つだけの場合 - ■ クラス、インターフェイス、トレイトに使えない名前
void, iterable - ■ ...
PHP 7.1.x で推奨されなくなる機能
- ■ ext/mcrypt
かわりに OpenSSL を使いましょう。 mcryptは PHP 7.2 でコアから削除されて、PECL に移る予定です。とのこと。 - ■ mb_ereg_replace() と mb_eregi_replace() の eval オプション
パターン修飾子 e が非推奨となりました。
その他の変更
- ■ 無効な文字列による算術演算の通知
- ■ 八進表記のオーバーフロー時の警告
- ■ $this の矛盾の修正
- ■ ハッシュなしでのセッション ID の生成
- ■ INI ファイルの扱いに関する変更
- ■ Session ID generation with a CSPRNG only
- ■ More informative TypeError messages when NULL is allowed
以上、適当にピックアップしました!