PHPカンファレンス[T-109]初めてのPHP Extension

2,593 views

Published on

Published in: Technology
1 Comment
0 Likes
Statistics
Notes
  • http://www.dbmanagement.info/Tutorials/MYSQL-PHP.htm
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Be the first to like this

No Downloads
Views
Total views
2,593
On SlideShare
0
From Embeds
0
Number of Embeds
529
Actions
Shares
0
Downloads
9
Comments
1
Likes
0
Embeds 0
No embeds

No notes for slide

PHPカンファレンス[T-109]初めてのPHP Extension

  1. 1. 初めての PHP Extension id:yokkuns 里 洋平 PHP カンファレンス 2009 Yohei Sato 1
  2. 2. アジェンダ ● 自己紹介 ● PHP Extension とは ● 引数と返り値 ● PHP の内部構造 ● PHP Extension の作成 Yohei Sato 2
  3. 3. 自己紹介 ● id:yokkuns ● 名前 : 里 洋平 ● 職業 :Web エンジニア ● 出身 : 種子島 ● 趣味 : プログラミングとかカラオケとか ● 仕事は、 PHP では無く、 Perl Yohei Sato 3
  4. 4. PHP Extension とは? Yohei Sato 4
  5. 5. PHP Extension とは ● PHP の拡張モジュール ● C/C++ で書かれてる ● 例) mysql 、 sockets 、 SimpleXML など Yohei Sato 5
  6. 6. 何故 PHP Extension ? ● 過去に C で書かれた既存のライブラリを流用 したい ● 実行速度。 C なので、当然 PHP で書くより 速い。 Yohei Sato 6
  7. 7. 引数と返り値 Yohei Sato 7
  8. 8. Extension で行う処理 ● 引数の取得 ● データ作成処理 ● 返り値の出力 Yohei Sato 8
  9. 9. データ型の問題 ● そのままでは、データのやりとりが出来ない。 $a = 100 $a Yohei Sato 9
  10. 10. データ型の問題 ● そのままでは、データのやりとりが出来ない。 int a = 100 a Yohei Sato 10
  11. 11. そこで、 Zend API $a = 100 a == 100 $a long a Zend API Yohei Sato 11
  12. 12. そこで、 Zend API $a == 100 long a =100 $a a Zend API Yohei Sato 12
  13. 13. PHP の内部構造 Yohei Sato 13
  14. 14. zval 構造体 $a = 100 zval 構造体 value refcount type is_ref Yohei Sato 14
  15. 15. zval 構造体 $a = 100 zval 構造体 value refcount type is_ref type = IS_LONG Yohei Sato 15
  16. 16. zval 構造体 $a = 100 zval 構造体 value zvalue_value 共用体 refcount lval type dval is_ref str ht type = IS_LONG obj Yohei Sato 16
  17. 17. zval 構造体 $a = 100 zval 構造体 value zvalue_value 共用体 refcount lval 100 type dval is_ref str ht type = IS_LONG obj Yohei Sato 17
  18. 18. 文字列の場合 $a = "PHP" zval 構造体 zvalue_value value 共用体 refcount lval type dval is_ref str str 構造体 ht val PHP obj len 3 type = IS_STRING Yohei Sato 18
  19. 19. PHP のデータタイプ ● IS_NULL ● IS_OBJECT ● IS_LONG ● IS_STRING ● IS_DOUBLE ● IS_RESOURCE ● IS_BOOL ● IS_CONSTANT ● IS_ARRAY ● IS_CONSTANT_ARRAY Yohei Sato 19
  20. 20. PHP の配列 ● PHP の配列は、 C とかで言う配列とは別物 ● 順番付けられたマップ Yohei Sato 20
  21. 21. PHP の配列の構造 zval zvalue_value hashtable type a zval = IS_ARRAY b zval c zval Yohei Sato 21
  22. 22. PHP のオブジェクトの構造 zval zvalue_value zend_object_value 構造体 type handle = IS_OBJECT handlers zend_object_handlers 構 造体 Yohei Sato 22
  23. 23. zend_object_handlers zend_object_handlers add_ref del_ref delete_obj clone_obj read_property write_property get_property_ptr get_property_zval_ptr get set has_property unsert_property get_properties get_method call_method get_constructor get_class_entry get_class_name compare_objects Yohei Sato 23
  24. 24. PHP Extension の作成 Yohei Sato 24
  25. 25. PHP Extension 作成方法 ● 昔は、 ext_skel コマンド – スケルトンを生成し、それを直接修正 ● 今は、 CodeGen_PECL – XML ファイルから PECL 用のコードを生成 Yohei Sato 25
  26. 26. CodeGen_PECL を使って Extension を作成 Yohei Sato 26
  27. 27. ・・・と思ったんですが Yohei Sato 27
  28. 28. 何と時間が無い! Yohei Sato 28
  29. 29. と、言うわけで 続きは、次回やります! Yohei Sato 29
  30. 30. ご清聴ありがとうございました。 Yohei Sato 30
  31. 31. 参考サイト ● PHP: Zend API: PHP のコアをハックする - Manual – http://www.php.net/manual/ja/internals2.ze1.zendapi.php ● PHP 変数管理を理解する - CPA-LAB テクニカル – http://www.cpa-lab.com/tech/032 ● DSAS 開発者の部屋 :PHP Extension を作ろう第1回 - まずは Hello World – http://dsas.blog.klab.org/archives/50777398.html ● DSAS 開発者の部屋 :PHP Extension を作ろう第2回 - 引数と返値 – http://dsas.blog.klab.org/archives/50782987.html ● DSAS 開発者の部屋 :PHP Extension を作ろう第3回 - クラスを作ろう – http://dsas.blog.klab.org/archives/50903613.html Yohei Sato 31
  32. 32. 参考書籍 ● Extending and Embedding PHP – http://alturl.com/tu93 ● PHP5 徹底攻略エクスパート編 – http://alturl.com/nymh Yohei Sato 32

×