PHP 7.1

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

以上、適当にピックアップしました!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です