tetsunosukeのnotebook

tetsunosukeのメモです

(昨日のことですが)PHP拡張勉強会いってきた。


荻原さん(id:i_ogi)主催のPHP拡張勉強会の第一回にいってきた。
初のサイボウズラボ。

(id:shimookaさんによる写真にちょっと写った)
http://photozou.jp/photo/show/106524/6875339

詳しい資料は荻原さんがアップしたこちらで。
http://www.slideshare.net/ogi/1php

とりあえず自分向けノート

Cであることはメリットでありデメリットである
 - メモリリークとかやばい

runkit, operator
  言語そのものの拡張

Sara講演資料、ソースコードくらいしか、まともなドキュメントがない・・・?

Extending and Embedding PHP - だいたい網羅されている

青マンモスにも少し書いてあるらしい

バイナリ互換:5.1 -> 5.2というのは無理

PHP5
SPL - 参考になる
SimpleXML - 極めてる感じ
わかりやすくなっている

PHP6
Unicodeの影響
まだ考えなくていいかな...

>>
@Y!
filter拡張の社内実装
PHPを「プラットフォームとして利用」

CodeGen_PECL: PHP5でしか動かないが、4と5で動くソースを作る
昔はext_skelというコマンドでした。(まあ忘れていいだろう)

Spec file
 モジュール名が必須
 依存関係とか(library, platform, other extensions)

 関数:
 MINIT, RINIT, ... PHPの動作時に自動的に呼ばれるもの
 PHPの起動時(M)、リクエストに対して(R)

関数の命名規約
 モジュール名をベースに。
 module-name: study1
 function name: study1_func()
 ini : study1.ini....

関数を作る!
prototypeを作る。
 マニュアルの書き方と同じにする。
 void funcname(void);
 int funcname(int param); ...
 string funcname(string param1, [[, string params], ---]);
 object ...
 可変引数やら

今日書いてみる関数 void study1_greeting([string name]);
 - 引数は任意、戻り値なし。nameに応じて

内部的にどのように変換されるかなどはPEAR::CodeGen_PECLのマニュアルを参照。
http://www.m-takagi.org/docs/php/CodeGen_PECL/
http://php-baustelle.de/CodeGen_PECL/manual.html

make testでextensionが読めない問題については何かしらの修正案があるといいな
php -mでloadされているextensionが表示される。
php -dextension=study1.so -r "study1_greeting();"


extname.h:
 ZEND_BEGIN_ARG_INFO_EXあたりで参照渡しやらなんやら

extname.c
 MINITとか
 MINFO: PHPINFOを呼んだときの。

 PHP_FUNCIONというマクロ
 do { } while(0); の中に実際のコードが書かれている
 PHP_FUNCION(study1_greeting)
  zen_parse_parameters( 引数の仕様 )

懇親会

id:amachangに会った!

優秀な人は日本の企業でがんばろうっていってた。
たくさんの人と会うのは確率の問題で、自分がついていきたい人を見つけられるかもしれないからって言ってた。

生で聞くとまたちょっと違うなあと思った。
単に言っているだけの人と、行動が起こせる人の違い...

そういえば、行動と言えば、BTOことウノウの尾藤さんが、懇親会の最中にコード書いてた。
この熱意みたいなものは見習わなきゃいけないなあと強く思った。