PHPBLT#6 PHPの未来に入るかもしれない機能の紹介

26
PHP 7.2 で入るかもしれないし 7.3 かもしれないし もっと未来で入るかもしれない… そんな新しい機能をちょっとだけ紹介するよ PHPBLT#6 @sters9

Transcript of PHPBLT#6 PHPの未来に入るかもしれない機能の紹介

Page 1: PHPBLT#6 PHPの未来に入るかもしれない機能の紹介

PHP 7.2 で入るかもしれないし 7.3 かもしれないしもっと未来で入るかもしれない…

そんな新しい機能をちょっとだけ紹介するよ

PHPBLT#6 @sters9

Page 2: PHPBLT#6 PHPの未来に入るかもしれない機能の紹介

今日の話

PHP 7.2 で入るかもしれないし 7.3 かもしれないしもっと未来で入るかもしれない…

そんな新しい機能をちょっとだけ紹介するよ

(タイトルそのまま)

※php-coreは本当にしらないのでそういう話はしません

Page 3: PHPBLT#6 PHPの未来に入るかもしれない機能の紹介
Page 4: PHPBLT#6 PHPの未来に入るかもしれない機能の紹介

PHP 好きですか!?

Page 5: PHPBLT#6 PHPの未来に入るかもしれない機能の紹介

http://qiita.com/rana_kualu/items/40ebed78742bfdbd1065

Page 6: PHPBLT#6 PHPの未来に入るかもしれない機能の紹介

https://wiki.php.net/rfc

Page 7: PHPBLT#6 PHPの未来に入るかもしれない機能の紹介

https://www.docker.com/

Page 8: PHPBLT#6 PHPの未来に入るかもしれない機能の紹介

参考実装を試すにはやっぱりDockerだよね

ホスト側の準備 yum install docker-engine

docker pull centos

docker run -it -d -v /tmp:/tmp --name=php7rfc centos

docker exec -it php7rfc /bin/bash

Page 9: PHPBLT#6 PHPの未来に入るかもしれない機能の紹介

参考実装を試すにはやっぱりDockerだよね

ゲスト側の準備yum groupinstall "Development Tools“

// 面倒なので一括準備 //

yum install libxml2-devel // 足りないらしいので別途導入 //

git clone -b xxxxx --depth=1 xxxxxxx // リポジトリとブランチはものによって変わる //

// コミットログがでかいので Shallow Clone しないと時間かかるつらい //

./buildconfig // configureするためのスクリプト生成 //

./configure // 追加で入れたいライブラリなどの設定が必要ならここで指定 //

make // コンパイル //

Page 10: PHPBLT#6 PHPの未来に入るかもしれない機能の紹介

参考実装を試すにはやっぱりDockerだよね

参考実装を試すぞ!php-src/sapi/cli/php

php-cli の実行ファイルになっているので、そこで動作確認ができる

もちろん php-fpm なども動かせる

余談 Intel(R) Xeon(R) CPU E5-4620 0 @ 2.20GHz

メモリ2GB

Docker version 1.7.1, build 786b29d

で、ビルドは10分くらいでした。

Page 11: PHPBLT#6 PHPの未来に入るかもしれない機能の紹介

(紹介1)Arrow Functions

Page 12: PHPBLT#6 PHPの未来に入るかもしれない機能の紹介

提案:Arrow Functions

ECMAScript6 で追加されたアレ (あるいは lambda 的なそれ)

let f = (x) => x * x

PHPでクロージャがあるからそういう短縮して書けるやつあってもいいじゃん!

fn という新しい予約語を作るよ! クロージャや簡単な関数で使われていてそこのインパクトが。。

Page 13: PHPBLT#6 PHPの未来に入るかもしれない機能の紹介

提案:Arrow Functions

// とりあえず掛け算

$pow = fn($x) => $x * $x;

var_dump( $pow(10) ); //=> int(100)

// カリー化的なもの

$mul = fn($x) => (fn($y) => $x * $y);

var_dump( $mul(2)(3) ); //=> int(6)

// もちろん型宣言もできるよ

$intSum = fn(array $ary): int => array_sum(array_map(intval, $ary));

var_dump($intSum([1.1, 2.2, 3.3, 4.4, 5.5]));

var_dump(array_sum([1, 2, 3, 4, 5]) === $intSum([1.1, 2.2, 3.3, 4.4, 5.5]));

Page 14: PHPBLT#6 PHPの未来に入るかもしれない機能の紹介

提案:Arrow Functions

// 過激な操作もワンライナーできるよ!(やめろ)

$flatten = ($__f = fn($ary, $__f) => array_reduce($ary, fn($c, $i) => array_merge($c, (is_array($i) ? $__f($i, $__f) : [$i])), [])) ? fn($ary) => $__f($ary, $__f) : 0;

var_dump( $flatten([1, [2, 3, [4, 5, 6]], [[[[7]]]]]) );

//=> [1, 2, 3, 4, 5, 6, 7]

Page 15: PHPBLT#6 PHPの未来に入るかもしれない機能の紹介

提案:Arrow Functions

// 複文も欲しいけどもっと未来の話なんだ(参考実装なし)

$x = fn($x) => { // Syntax Error!

$a = $x * 2;

$b = $x * 2;

return $b;

};

Page 16: PHPBLT#6 PHPの未来に入るかもしれない機能の紹介

提案: Arrow Functions

実は2015年にも提案されていたが投票で却下 やりとりなどMLにあるっぽい?

追っていませんごめんなさい..

投票結果は 22/30

Short Closures という名前で出ている

// こういう書き方

array_map($x ~> ($x * 2), $input);

Page 17: PHPBLT#6 PHPの未来に入るかもしれない機能の紹介

提案: Arrow Functions

ちょっとだけ使ってみて。 激しい実装はするな(読めない)

そもそもクロージャ、コールバックという機会がPHPは少な目なので入っても大活躍しないのでは…?

フレームワークとか Collection ゴリゴリなとこは嬉しいと思う!

Page 18: PHPBLT#6 PHPの未来に入るかもしれない機能の紹介

(紹介2)Pipe Operator

Page 19: PHPBLT#6 PHPの未来に入るかもしれない機能の紹介

提案:Pipe Operator

メソッドチェインあると思うんですよー 例)(new Query)->where()->order()->limit();

でもチェインできずバケツリレーも多い! 例)$hoge = where(new Query);

$hoge = order($hoge);$hoge = limit($hoge);

※提案ではフレームワークでありそうなHTTPレスポンスを作るまで、が紹介されてます。

※今回はわかりやすく?雑な?例を挙げました…

Page 20: PHPBLT#6 PHPの未来に入るかもしれない機能の紹介

提案:Pipe Operator

そこで Pipe Operator ですよ 例) $hoge = where(new Query)

|> order($$)|> limit($$);

「$$」すごーい! わかりづらいがな。

Page 21: PHPBLT#6 PHPの未来に入るかもしれない機能の紹介

提案:Pipe Operator

ファイルを探す!

$ret = scandir($arg)

|> array_filter($$, function($x) { return $x !== '.' && $x != '..'; })

|> array_map(function ($x) use ($arg) { return $arg . '/' . $x; }, $$)

|> getFileArg($$) // ファイル情報取得

|> array_merge($ret, $$);

Page 22: PHPBLT#6 PHPの未来に入るかもしれない機能の紹介

提案:Pipe Operator

ちょっとだけ使ってみて。 メソッドチェインじゃないのにメソッドチェイン感

結構ヨサソウ

個々の行が長いとやっぱり読みにくい でもそういうのが乱立する時代になりそう(実装されたら)

Page 23: PHPBLT#6 PHPの未来に入るかもしれない機能の紹介

提案:Pipe Operator

$x = Hoge()

|> array_map(function(){

//

//

// //

//

//}, $$)

|> …

Page 24: PHPBLT#6 PHPの未来に入るかもしれない機能の紹介

PHPの未来をソースも併せて見た結果wwwww

どういう実装でPHPが動いているかも気になっちゃったんだよ…

Page 25: PHPBLT#6 PHPの未来に入るかもしれない機能の紹介

今日の話

PHP 7.2 で入るかもしれないし 7.3 かもしれないしもっと未来で入るかもしれない…

そんな新しい機能をちょっとだけ紹介するよ

(タイトルそのまま)

※php-coreは本当にしらないのでそういう話はしません

php-coreめっちゃ興味わいてきた 💪(‘ω’💪)

Page 26: PHPBLT#6 PHPの未来に入るかもしれない機能の紹介

ほかにも面白そうな機能が提案されているのでRFC を見てみよう!

一個ずつじっくり見てたらめっちゃ疲れたので2つしか見てません。。