qnote アドベントカレンダー第1日目は、ちょうど PHP カンファレンス2019の開催日という事もあり、現地からの採れたてレポートをお送りしたいと思います。
採れたての elePHPant (3,000円) 。経費で落ちる?
#PHPカンファレンス2019
今年はいつもよりも遅めの12月開催。ちょうど11月29日にPHP7.4がリリースされ、またPHP7.1が EOL を迎えた日でもあります。
毎年おなじみの大田区産業プラザにて19年目20回目の開催。
今年は嬉しいことに後輩 (@kambe0331) がスタッフとして参加。きっと刺激をうけて来年は登壇してくれる事を期待しています。
#基調講演
乗り換え間違えてギリギリ到着。まずは御目当てのキーノートを拝聴。
1回目から参加している私としては廣川さんのキーノートを毎回楽しみにしています。
年を重ねるごとに廣川さんがティムクックに見えるのは多分私だけではないかと思いますが、なんと今は宇宙開発に携わっているそうです。すごい!
キーノートではPHPのこれまでとこれから、また、PHP7.4の仕様変更などをわかりやすく紹介していただきました。30分くらいの時間で内容は濃いのに非常にまとまっていてこの辺りはさすがベテランの魅せる技という感じでした。
PHP7.4 改善/変更のポイント
キーノートにもありましたが簡単にまとめます。
クラスのプロパティ型指定
PHP7から導入されたメソッド引数と返り値のタイプヒンティングのプロパティ版。
Nullable 識別子(オプショナル型みたいなもの?)で null を許容するかどうかも定義可能。
class Foo {
public int $a;
public ?object $b = null;
}
後方互換のためか、デフォルトでは $a に string を突っ込んでもエラーにはならず、int にキャストするだけというのは PHP らしいですが、
declare(strict_types=1);
と書く事で Fatal error を出す事が可能。
他の言語では当たり前ですが、ようやく PHP でもタイプセーフなコードが書けるようになりそうですね。
OpCache のプリロード指定
Webリクエストで実行されたコンパイルのキャッシュはこれまでもありましたが、あくまでも起動後に実行されたコードのキャッシュなので、再起動直後はキャッシュ生成のオーバヘッドがありました。これをオプション指定で起動時にキャッシュしてしまおうというもの。これは php.ini に書けば良いのかな?
opcache.preload=/var/www/preload.inc
FFI (Foreign Function Interface)
あまり知見が無いですが(←調べろ)、PHPからCのソースを実行するようなやつ?前からエクステンションにあったものをネイティブに移植する事によって、前述のプリロード指定などで高速化し実現に至ったようです。より高速な処理が求められる場合に有効。
$ffi = FFI::cdef('double atan2(const double, const double);', 'libm.so.6')
var_dump($ffi->atan2(0.1, 0.0);
昔あったJavaのブリッジエクステンションみたいなもんかな?
配列スプレッド構文
JavaScript ではお馴染みの構文ですね。これまで array_merge を使用していた部分がより簡潔に書けます。
$a = [3, 4];
$b = [1, 2, ...$a, 5]; // => [1, 2, 3, 4, 5];
アロー関数 (ショートクロージャー)
これも JavaScript ぽいですね。個人的には fn はダサいなと思いますが。。
これが、
function ($x) use ($y) {
return ($x * $x + $y);
}
こう書けます。
fn($x) => ($x * $x + $y);
親スコープの変数が参照できる(つまりuse()が不要)なのでより簡潔になりますね。
??=構文
NULL合体演算子をより実用的にしたもの。変数が設定されていない場合に代替文字列を代入。
// PHP7
$a['user'] = $a['user'] ?? 'nobody';
// PHP7.4
$a['user'] ??= 'nobody';
で、これ、何演算子っていうの?
その他
これ以外にも細かな関数の追加や演算子の仕様変更、弱参照のインタフェース追加など、
PHP8のリリースまでの最後のメジャーバージョンという事もあり、新機能盛り沢山でした。早く仕事で使いたい!
まとめ
そんなわけで基調講演を堪能し、後輩が働いているところも確認できたので、カフェに待避し iPad で Qiita のこの原稿を書いています。午後もいろいろ楽しみなセッションがあるので、年に一度のお祭りを楽しんできます!
qnote のアドベントカレンダー (https://qiita.com/advent-calendar/2019/qnote) も PHP だけでなくいろんな言語、技術のお話をお届けできるかと思いますのでどうか皆さんよろしくお願いいたします!