Do You PHP はてブロ

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

CodeGen_PECL 1.1.0リリース

ほぼ1年ぶりにバージョン1.1.0がリリースされた模様。


Changelog:

Changes since 1.0.4:

  • new function prototype parser
  • added PHP version check to config.m4
  • functions accepting/returning resources or classes

or using constants for default values now "inherit"
conditional compilation settings from these elements

  • disabled output of AC_CHECK_TYPE checks for resource

types due to autoconf version conflicts

  • varargs support

以前、interfaceとclassを同じextensionで定義した場合の不具合についてのエントリを上げていましたが、報告したら修正されたようで、このリリースにも含まれていました。ということで、第25回PHP勉強会でやったコード一式 - Do You PHP はてなで使ったspecファイル

<?xml version="1.0"?>
<extension name="mini" version="0.0.1">
 <interface name="TestInterface">
 </interface>
 <class name="ParentClass">
  <summary>ParentClass</summary>
  <implements interface="TestInterface"/>
  <property name="_type" access="private" type="int" value="0"/>
  <function name="setType1" access="protected">
   <proto>string setType1(string type)</proto>
  </function>
 </class>
 <class name="testClass" extends="ParentClass">
  <summary>testClass</summary>
  <function name="setType2" access="public">
   <proto>string setType2( [string type])</proto>
  </function>
 </class>
  <function name="setType3">
   <proto>void setType3(int type)</proto>
  </function>
  <function name="getType4">
   <proto>array getType4(float type1, int type2)</proto>
  </function>
  <function name="getType5">
   <proto>array getType5(float type1, int type2, array &amp;type3 [, object type4])</proto>
  </function>
</extension>

から生成されたCソースのPHP_MINIT_FUNCTIONを確認したところ、

PHP_MINIT_FUNCTION(mini)
{
    interface_init_TestInterface();
    class_init_ParentClass();
    class_init_testClass();

    /* add your stuff here */

    return SUCCESS;
}

という具合に

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

の順になっていました。