hnwの日記

PHPPHPがド変態であることに今さら気づいた

Anthony Ferraraさん(@ircmaxell)が2012年12月に公開したPHPで記述されたPHP実装「PHPPHP」について、今さらですが調べてみました。


@ircmaxellさんはPHPの内部構造についての解説サイト「PHP Internals Book」の筆者の一人であり、PHP 5.5で導入された新しいパスワードハッシュ関数の提案・実装者でもあります(参照:https://wiki.php.net/rfc/password_hash)。最近発表した「Recki-CT」も興味深いプロダクトです。


そんなわけでジョークレベルではないだろうとは思ってましたが、今回中身を見てみたらガチすぎて恐怖しました。どういうモチベーションでこんなもん作る気になるんだ…。


PHPPHPの挙動はおおよそ次のようなものです。


これを実際に動かしてみると非常に遅いのですが、処理内容を考えると仕方ない気がします。そもそも、一定以上動くレベルまで作り込んだ時点で頭おかしい(褒め言葉)ですよね。


ただし、PHP標準関数の呼び出しでは基本的にPHP本体の関数を利用しており、ここはズルと言えばズルです。とはいえ、PHPの関数を自前実装するための仕組みは既に用意されているので、あとはやる気の問題だけです。実際、PHPPHPのimplode関数はPHPのimplode関数を使わずに文字列操作で実装されています。


クラス設計も非常に見通しが良いと感じたので、よーしPHP実装しちゃうかーと思っている方は参考にしてみてはいかがでしょうか。また、PHP-Parserの利用例として見ても良さそうです。