フリーランスのためのネットビジネス専門学校 ネットで独立開業を目指す人を応援
フリーランスのためのネットビジネス専門学校 ネットで独立開業を目指す人を応援

PHP7.3.0がリリースされた & Windowsで試してみる

2018/12/06、日本時間の2018/12/07早朝あたりにPHP7.3.0がリリースされました

7.2からの変更点に関しては過去幾度か記事にしていますが、これらの機能が正式に使えるようになりました。
公式の移行マニュアルは日本語はまだ来ていません。
英語版を参照するとよいでしょう。

Windowsへのインストール

Windowsにはphpbrewのような便利ツールはないので、統合パッケージであるXAMPPを使うことにします。
Docker?Vagrant?うるせーしるか

XAMPP

執筆時点での最新版、PHP7.2.12をダウンロードして、インストールする。
既にXAMPPがインストールされているようであれば、一度アンインストールする。
アンインストール中に『htdocsを削除するか?』と聞かれるので、Noを選んでおこう。

そして同じディレクトリに最新版をインストールしようとすると『The selected folder is not empty』と言われる。ファック

個人的にXAMPP最大の欠点はここだと思っていて、何故かアップグレード機能がないんですよね。
conda update condaあたりを見習ってほしいところ。

最新版は適当に新規ディレクトリにインストールして、htdocsは旧ディレクトリからコピーするなりシンボリックリンク1貼るなりするとよいでしょう。

PHP7.3.0

せっかくインストールされたPHP7.2.12ですが、一度も日の目を見ることはありません。

PHP for Windowsから『PHP 7.3.0 VC15 x86 Thread Safe』をダウンロードし、中身を全部XAMPP/phpディレクトリにぶちまける。
これでインストール完了。

なお、ここはx64ではありません。
どうもXAMPPに入っているApacheは32ビット版らしく、x64を入れると死にます。残念。
まあ、所詮動作確認して遊ぶだけなので適当でいいでしょう。

起動 & 設定

Apacheを起動してlocalhostにアクセスするとPHP7.3.0になっているはず。簡単。

01.png

気に入らない設定などがあればphp.iniで対処しよう。

必ずやっておくべきことは
error_reporting=E_ALLにする
date.timezone=Asia/Tokyoにする

個人的お勧めは
extension=gmpのコメントを解除

あとXAMPPのphp.iniには何故か古のregister_globalsmysql.allow_local_infileといった設定が残っているのだが、動くことはないので気にしなくてもよい。
気になるなら適当に削除しよう。

新機能を試してみる

// ヒアドキュメント改善
$text = <<< EOF
          a
        b
      c
      EOF;

var_dump($text);
/* ↓こうなる
    a
  b
c
*/

// 末尾カンマ
    $a = [1,2,];
    $b = (new DateTime())->format('Y-m-d H:i:s', );
    var_dump($a, $b, );


// JSONの例外
    try {
        $invalidJson = 'hoge';
        json_decode($invalidJson, true, 512, JSON_THROW_ON_ERROR);
    } catch (JsonException $e) {
        echo
        $e->getMessage(), // Syntax error
        json_last_error_msg(); // No error
    }

// listのリファレンス
    $array = [1, 2];
    list($a, &$b) = $array;

    $a = 4;
    $b = 5;
    var_dump($array); // [1, 5]

// ネットワークインターフェイスを取得
    var_dump(net_get_interfaces());

// array_key_last
    echo array_key_first([1, 2, 3, 4]); // 0
    echo array_key_last([1, 2, 3, 'a'=>4]); // a

// Argon2id
    echo password_hash('password', PASSWORD_ARGON2ID, [
        'memory_cost' => 1 << 17,
        'time_cost' => 4,
        'threads' => 2,
    ]); // →のような文字列になる $argon2id$v=19$m=131072,t=4,p=2$R08vOXBNTldadFB3czhaMg$/6vBWLkvKMrx/tf+Cl99TmS50nmSr/xgFUlaiavTOlU

// defineの第三引数削除
    define('FOO', 'BAR', true); // Deprecated: define(): Declaration of case-insensitive constants is deprecated
    echo FOO; // BAR
    echo foo; // BAR Deprecated: Case-insensitive constants are deprecated

// assert
namespace HOGE;
    function assert(){} // Deprecated: Defining a custom assert() function is deprecated

// setcookie
    setcookie('hoge', 'fuga', [
        'expires' => 3600,
        'path' => '/',
        'secure' => true,
        'httponly' => true,
        'samesite' => 'Strict',
        'foo' => 'bar', // Warning: setcookie(): Unrecognized key 'foo' found
    ]);

// GMP関数
    echo gmp_binomial(10, 5); // 252 ( = 10C5 )
    echo gmp_lcm(14, 11); // 154 最小公倍数
    echo gmp_perfect_power(27); // 累乗数であればtrue
    echo gmp_kronecker(5, 6);// 1 ←?

リリース版だから当然と言えば当然ですが、ひととおり問題なく使えました。

ただgmp_kroneckerは何なのかよくわかりません。
内部的には単にmpz_kroneckerを呼んでるだけでした。

以上はこれまで紹介してきたものですが、それ以外にも変更が多少あるようです。

MBString support for full case-mapping and case-folding

echo mb_strtoupper('Straße'); // STRASSE

PHP7.2まではSTRASEですが、7.3からは正しくSTRASSEなります
まあ、本当にこれで正しいのかよくわからないのですが。

LDAP Controls Support

ldap_add他、LDAP関数の引数にLDAP controlsが追加されました。
英語版のマニュアルには既に記載されていますが、日本語版にはまだありません。

Improved FPM Logging

グローバルオプションlog_limit・log_buffering・decorate_workers_outputが追加されました。
Long messages into stdout/stderr are truncated incorrectlyというバグへの対応のためのようです。
1024文字とかの長いログを出さなければ特に関係ないと思われます。

感想

PHP Intelephenseは新文法に未対応で、文法エラー吐きまくりです。
というか作者の足取りが2018年3月から突然途絶えてるのだが大丈夫か。

PHP7.3は目玉となる新機能はヒアドキュメントと末尾カンマくらいで、あまりドラスティックな変化こそありませんが、地味で目立たないながらも地道な改善・パフォーマンス向上が多数行われています。
7.2からの互換性が壊れる点もほとんどないので、既にPHP7.2環境であるなら、さくっと7.3に上げてしまってもほとんど問題ないでしょう。
7.0、7.1からであれば、互換性のない点もそれなりにあるので、移行ガイドなどを参照しつつ対応していきましょう。

5.xなら今すぐ予算組んで7.2にアプグレしろ。


  1. ショートカットではない。 

[紹介元] PHPタグが付けられた新着記事 – Qiita PHP7.3.0がリリースされた & Windowsで試してみる

コメント

記事に戻る

コメントを残す