19
はい

PHP language update 201211

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: PHP language update 201211

はい

Page 2: PHP language update 201211

始まってしまいました

Page 3: PHP language update 201211

PHP Language UpdateMoriyoshi Koizumi <[email protected]>

Page 4: PHP language update 201211

このプレゼンの見解はThe PHP Development Team とは関係ありません

This presentation does not reflect the opinions of the PHP development team.

Page 5: PHP language update 201211

Nov 15, 2012PHP 5.5 alpha1 released

Page 6: PHP language update 201211

PHP 5.5 alpha1の目玉1.ジェネレータとコルーチン2.foreachで変数分解だ!!!!3.empty()のカッコ内に変数以外が指定可能に!?

4.finally5.社畜バグ修正

独断と偏見に

基づく

Page 7: PHP language update 201211

ジェネレータとコルーチンyieldキーワードの追加yieldを含む関数はジェネレータになるジェネレータは特殊なイテレータとしてユーザには見える

send()メソッドとの組み合わせによるコルーチン

Page 8: PHP language update 201211

ジェネレータとコルーチン<?phpfunction foo() { yield 1; yield 2; yield 3;}

foreach (foo() as $a) { var_dump($a);}

int(1)int(2)int(3)

スクリプト 実行結果

Page 9: PHP language update 201211

ジェネレータとコルーチン<?phpfunction coroutine() { echo "started\n"; while (true) { $val = yield; echo "$val\n"; }}

$c = coroutine();$c->send(1);$c->send(2);

started12

スクリプト 実行結果

Page 10: PHP language update 201211

ジェネレータとコルーチンPythonの場合

def coroutine(): print("started") while True: val = yield print(val)

c = coroutine()c.next()c.send(1)c.send(2)

started12

スクリプト 実行結果

Page 11: PHP language update 201211

foreachで変数分解だ!!!!

foreachステートメントで配列要素を分解できる

なぜ今までできなかったのか疑問

できてうれしいのかも(やや)疑問

Page 12: PHP language update 201211

foreachで変数分解だ!!!!<?php$list = array( array(1, 2), array(3, 4), array(5, 6));foreach ($list as list($a, $b)) { echo "$a, $b\n";}

1, 23, 45, 6

スクリプト 実行結果

Page 13: PHP language update 201211

empty()のカッコ内に変数以外が指定可能に!?

見てもらった方が早い

なぜこれまでできなかったのだろう...

<?phpvar_dump(empty(strlen('')));

Page 14: PHP language update 201211

finally

try~catch~finallyなぜいままで...

Page 15: PHP language update 201211

finallyの落とし穴Fatal errorが発生するとfinallyが呼ばれない

<?phptry { array() + 0;} finally { echo "finally\n"; // never get here!}

Fatal error: Unsupported operand types

Page 16: PHP language update 201211

社畜バグ修正DateTimeクラスのmodify()メソッドでは次のような機能をサポートしている

weekdays (営業日ベースのオフセット) の処理に悲劇が

<?php$d = new DateTime("2012-11-02");$d->modify("+1 days");var_dump($d->format('Y-m-d')); // 2012-11-03

Page 17: PHP language update 201211

社畜バグ修正<?php$d = new DateTime("2012-11-02");echo $d->format('l'), "\n";$d->modify("+5 weekdays");echo $d->format('l'), "\n";

FridaySunday

スクリプト

実行結果 (~PHP 5.4)_人人人人人人_> 突然の社畜 < ̄^Y^Y^Y^Y^Y^Y ̄

Bug #61642 modify("+5 weekdays") returns Sunday

Page 18: PHP language update 201211

社畜バグ修正<?php$d = new DateTime("2012-11-02");echo $d->format('l'), "\n";$d->modify("+5 weekdays");echo $d->format('l'), "\n";

FridayFriday

スクリプト

実行結果 (PHP 5.5 alpha1)

Page 19: PHP language update 201211

ま と め

ハワイ諸島は10cm/年というスピードで伊豆半島に近づいている

アンドロメダ大銀河は銀河系に40km/時というスピードで近づいている

PHPはPythonに近づいている

いずれも衝突の瞬間を生きているうちに目撃できないのが残念です