タグ

phpとgeneratorに関するclavierのブックマーク (4)

  • PHPのジェネレータはイテレータより速い - hnwの日記

    先日の記事「PHPのジェネレータの実装を調べてみた」で僕は次のように書きました。 GeneratorクラスはIteratorインターフェースを実装しており、対応するPHPメソッドを持っています。また、Cで実装した場合のみ指定できるイテレータ関数も実装しています。このように両方が指定されている場合、foreachループではCの関数が呼ばれ、イテレータメソッドを明示的に指定した場合はPHPメソッドの方が呼ばれます。 ところで、イテレータに対応するPHPメソッドとC関数となぜ2つとも実装する必要があるのでしょうか。実は、PHPメソッドの方だけ実装すれば正常に動作します。C関数を実装する理由は速度面のメリットからだというのが僕の理解です。C関数は関数ポインタで単に呼び出せるのに対し、PHPメソッドの呼び出しは命令実行器の状態保存・復元の必要があるなど、呼び出しのコストがやや高いのです。 PHPのジ

    PHPのジェネレータはイテレータより速い - hnwの日記
  • PHP5.5のジェネレータをSPLのイテレータと組み合わせてみる - hnwの日記

    リリースが間近になったPHP5.5ではジェネレータが導入される予定です。これはイテレータを簡単に記述する文法を導入するもので、Pythonのジェネレータに非常に良く似ています。 もう少し詳しく説明しましょう。PHP5.5では、yieldというキーワードが導入されました。これはジェネレータで値を受け渡すための構文です。このyieldを含む関数はジェネレータ関数と呼ばれます。関数がジェネレータ関数かどうかは、PHPの解釈のタイミングで自動的に判断されます。 ジェネレータ関数が呼ばれると、ジェネレータ関数に対応するジェネレータオブジェクトが返されます。関数呼び出しの時点ではジェネレータ関数の中身は1行も実行されません。ジェネレータオブジェクトから値を取り出すタイミングで初めてジェネレータ関数の先頭からyield文までが実行され、yieldされた値を取り出して停止します。イテレータから次の値を取り

    PHP5.5のジェネレータをSPLのイテレータと組み合わせてみる - hnwの日記
  • PHP5.5新機能「ジェネレータ」初心者入門

    PHP5.5の新機能「ジェネレータ(Generator)」について、「それって何?」「どううれしいの?」「何に使えるの?」の3つを初心者向けに解説。動画 http://www.slideshare.net/kwatch/php55Read less

    PHP5.5新機能「ジェネレータ」初心者入門
  • 俺の彼女と幼なじみとPHPとAutoloadが修羅場すぎる(classmapのはなし) - Feelin' Kinda Strange

    PHPのことを一晩中考えてる皆さん!Autoload使ってますか! - 「PHP5.3世代の最新フレームワーク使ってるから当然使ってるよ!」(キリッ!) - 「is_aの挙動の変更はまさにPHPっぽいと断言できる!」(キリッ!) - 「vendor/.composer/autoload.phpをリクワイアするのハもうオーベイではジョーシキデース!」(キリッ!) なるほど!! 残念!そちらのPHPのオートローディング機能そのものではなく、 http://jp.php.net/autoload theseer/Autoload のほうです。 https://github.com/theseer/Autoload PHPカンファレンスのスライドにも載っけてます。 http://www.slideshare.net/sasezaki/php-9151036/51 PHPカンファレンスでも話した通り

    俺の彼女と幼なじみとPHPとAutoloadが修羅場すぎる(classmapのはなし) - Feelin' Kinda Strange
  • 1