Do You PHP はてブロ

Do You PHPはてなからはてブロに移動しました

第25回PHP勉強会でやったコード一式

勉強会でやったファイルそのものではないですが、とりあえず上げておきます。

まあ、PEAR::PHP_Parserのサンプルとして見てもらった方が良いかも知れません。

で、先ほど気づいたんですが、PEAR::CodeGen_PECLのspecファイルにクラスとインターフェースを同時に定義すると、生成されたCソース内にあるPHP_MINIT_FUNCTION関数で

  1. クラス
  2. インターフェース

の順でそれぞれのinit関数が呼び出されてしまいます。。。つまり、

class TestClass implements TestInterface

のような場合、

PHP Warning: Couldn't find interface 'TestInterface' while setting up class 'TestClass', skipped in Unknown on line 0

となってしまいます。この場合、PHP_MINIT_FUNCTIONで順番を

  1. インターフェース
  2. クラス

にしてやると大丈夫そうです。
が、手元の環境では

<?php
class TestClass extends ParentClass implements TestInterface

とするとsegfaultしてしまいました。。。前述のサンプルでは、苦し紛れに

<?php
class ParentClass implements TestInterface
class TestClass extends ParentClass

としちゃってます。え〜。。。orz