はい
始まってしまいました
PHP Language Update
Moriyoshi Koizumi <moriyoshi@php.net>
このプレゼンの見解は
The PHP Development Team
とは関係ありません

    This presentation does not reflect the opinions of
    the PHP development team.
Nov 15, 2012
PHP 5.5 alpha1 released
PHP 5.5 alpha1の目玉  に基づく
               断と偏見
              独
1.ジェネレータとコルーチン
2.foreachで変数分解だ!!!!
3.empty()のカッコ内に変数
  以外が指定可能に!?
4.finally
5.社畜バグ修正
ジェネレータとコルーチン
yieldキーワードの追加
yieldを含む関数はジェネレータになる
 ジェネレータは特殊なイテレータとして
 ユーザには見える
send()メソッドとの組み合わせによるコ
ルーチン
ジェネレータとコルーチン
スクリプト                     実行結果
<?php                     int(1)
function foo() {          int(2)
    yield 1;
    yield 2;              int(3)
    yield 3;
}

foreach (foo() as $a) {
    var_dump($a);
}
ジェネレータとコルーチン
スクリプト                    実行結果
<?php                    started
function coroutine() {
    echo "startedn";
                         1
    while (true) {       2
        $val = yield;
        echo "$valn";
    }
}

$c = coroutine();
$c->send(1);
$c->send(2);
ジェネレータとコルーチン
                  Pythonの場合
スクリプト                  実行結果
def coroutine():       started
    print("started")   1
    while True:        2
        val = yield
        print(val)

c = coroutine()
c.next()
c.send(1)
c.send(2)
foreachで変数分解だ!!!!

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

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

できてうれしいのかも(やや)疑問
foreachで変数分解だ!!!!
スクリプト                             実行結果
<?php
$list = array(
                                  1, 2
    array(1, 2),                  3, 4
    array(3, 4),
    array(5, 6)                   5, 6
);
foreach ($list as list($a, $b))
{
    echo "$a, $bn";
}
empty()のカッコ内に変数以外
が指定可能に!?

見てもらった方が早い
<?php
var_dump(empty(strlen('')));




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


try~catch~finally
なぜいままで...
finallyの落とし穴
 Fatal errorが発生すると
 finallyが呼ばれない
<?php
try {                 Fatal error: Unsupported operand types
    array() + 0;
} finally {
    echo "finallyn"; // never get here!
}
社畜バグ修正
DateTimeクラスのmodify()メソッドで
は次のような機能をサポートしている
<?php
$d = new DateTime("2012-11-02");
$d->modify("+1 days");
var_dump($d->format('Y-m-d')); // 2012-11-03


weekdays (営業日ベースのオフセット)
の処理に悲劇が
社畜バグ修正
スクリプト
<?php
$d = new DateTime("2012-11-02");
echo $d->format('l'), "n";
$d->modify("+5 weekdays");
echo $d->format('l'), "n";
     Bug #61642 modify("+5 weekdays") returns Sunday

実行結果 (∼PHP 5.4)
Friday    _人人人人人人_
Sunday    > 突然の社畜 <
                    ̄^Y^Y^Y^Y^Y^Y ̄
社畜バグ修正
スクリプト
<?php
$d = new DateTime("2012-11-02");
echo $d->format('l'), "n";
$d->modify("+5 weekdays");
echo $d->format('l'), "n";


実行結果 (PHP 5.5 alpha1)
Friday
Friday
ま と め

ハワイ諸島は10cm/年というスピードで伊豆半島に
近づいている
アンドロメダ大銀河は銀河系に40km/時というス
ピードで近づいている
PHPはPythonに近づいている


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

PHP language update 201211