PHP 7.2 で入るかもしれないし 7.3 かもしれないしもっと未来で入るかもしれない…
そんな新しい機能をちょっとだけ紹介するよ
PHPBLT#6 @sters9
今日の話
PHP 7.2 で入るかもしれないし 7.3 かもしれないしもっと未来で入るかもしれない…
そんな新しい機能をちょっとだけ紹介するよ
(タイトルそのまま)
※php-coreは本当にしらないのでそういう話はしません
PHP 好きですか!?
http://qiita.com/rana_kualu/items/40ebed78742bfdbd1065
https://wiki.php.net/rfc
https://www.docker.com/
参考実装を試すにはやっぱりDockerだよね
ホスト側の準備 yum install docker-engine
docker pull centos
docker run -it -d -v /tmp:/tmp --name=php7rfc centos
docker exec -it php7rfc /bin/bash
参考実装を試すにはやっぱりDockerだよね
ゲスト側の準備yum groupinstall "Development Tools“
// 面倒なので一括準備 //
yum install libxml2-devel // 足りないらしいので別途導入 //
git clone -b xxxxx --depth=1 xxxxxxx // リポジトリとブランチはものによって変わる //
// コミットログがでかいので Shallow Clone しないと時間かかるつらい //
./buildconfig // configureするためのスクリプト生成 //
./configure // 追加で入れたいライブラリなどの設定が必要ならここで指定 //
make // コンパイル //
参考実装を試すにはやっぱり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分くらいでした。
(紹介1)Arrow Functions
提案:Arrow Functions
ECMAScript6 で追加されたアレ (あるいは lambda 的なそれ)
let f = (x) => x * x
PHPでクロージャがあるからそういう短縮して書けるやつあってもいいじゃん!
fn という新しい予約語を作るよ! クロージャや簡単な関数で使われていてそこのインパクトが。。
提案: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]));
提案: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]
提案:Arrow Functions
// 複文も欲しいけどもっと未来の話なんだ(参考実装なし)
$x = fn($x) => { // Syntax Error!
$a = $x * 2;
$b = $x * 2;
return $b;
};
提案: Arrow Functions
実は2015年にも提案されていたが投票で却下 やりとりなどMLにあるっぽい?
追っていませんごめんなさい..
投票結果は 22/30
Short Closures という名前で出ている
// こういう書き方
array_map($x ~> ($x * 2), $input);
提案: Arrow Functions
ちょっとだけ使ってみて。 激しい実装はするな(読めない)
そもそもクロージャ、コールバックという機会がPHPは少な目なので入っても大活躍しないのでは…?
フレームワークとか Collection ゴリゴリなとこは嬉しいと思う!
(紹介2)Pipe Operator
提案:Pipe Operator
メソッドチェインあると思うんですよー 例)(new Query)->where()->order()->limit();
でもチェインできずバケツリレーも多い! 例)$hoge = where(new Query);
$hoge = order($hoge);$hoge = limit($hoge);
※提案ではフレームワークでありそうなHTTPレスポンスを作るまで、が紹介されてます。
※今回はわかりやすく?雑な?例を挙げました…
提案:Pipe Operator
そこで Pipe Operator ですよ 例) $hoge = where(new Query)
|> order($$)|> limit($$);
「$$」すごーい! わかりづらいがな。
提案: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, $$);
提案:Pipe Operator
ちょっとだけ使ってみて。 メソッドチェインじゃないのにメソッドチェイン感
結構ヨサソウ
個々の行が長いとやっぱり読みにくい でもそういうのが乱立する時代になりそう(実装されたら)
提案:Pipe Operator
$x = Hoge()
|> array_map(function(){
//
//
// //
//
//}, $$)
|> …
PHPの未来をソースも併せて見た結果wwwww
どういう実装でPHPが動いているかも気になっちゃったんだよ…
今日の話
PHP 7.2 で入るかもしれないし 7.3 かもしれないしもっと未来で入るかもしれない…
そんな新しい機能をちょっとだけ紹介するよ
(タイトルそのまま)
※php-coreは本当にしらないのでそういう話はしません
php-coreめっちゃ興味わいてきた 💪(‘ω’💪)
ほかにも面白そうな機能が提案されているのでRFC を見てみよう!
一個ずつじっくり見てたらめっちゃ疲れたので2つしか見てません。。