hiranophpの配列はどのようにして初期化され実行されるのかTwitterFacebookGoogle+はてブPocket概要phpなどのLLは、記述するだけでコンパイルなしに実行されますがその中身はどうなっているのでしょうか。今回は配列を例にとって、実際にphp処理系をおってみます。実装について順を追って解説していきたいと思います。zend処理系まずはphpの処理系について全体像を軽く解説します。ドキュメントも結構まとまっておりこの辺りなど非常に参考になります。(4年前ですがこの勉強会行きたかったな・・・)さて、話を戻しますがphpのコアな部分はzend処理系と呼ばれる実装によって成り立っています。frameworkというフレームワークが存在しますが、そちらのフレームワークとしてのzendではなくてphpの初期の発展に寄与したグループのzendです。zend処理系ではphpのコードから実際に処理を実行するまでに下記のフェーズを実行します。字句解析コードを字句(トークン)に分解します。実際にOPcodeを実行します通常のアプリケーション開発なんかで言うとOPcodeなどは聞いたことがある方も多いのではないでしょうか。有名どころではOPcacheなどがありますね。OPcacheはその名の通りOPcodeをキャッシングします。実行することで中間コードを生成するのですが、同じコードを毎回解析するのはかなり無駄なコストですね。この中間コードをキャッシングすることで実行性能を上昇させることを目的とした機能です。余談ですがこちらはphp5.5以降では標準搭載されるようになっていますね。これらはごく普通にphpアプリケーションを開発しているだけだとあまり関わることがありません。今回はこちらについて掘り下げていきたいと思います。字句解析まず字句解析について。先に簡単に説明したようにコードを字句(トークン)に分解する作業です。イメージしやすいように下記のサンプルコードを実行してみます。PHP_EOL;}token_get_allはphpコードを引数として受け取り、そのコードをトークンレベルまで分解します。