SlideShare une entreprise Scribd logo
1  sur  32
Télécharger pour lire hors ligne
初めての PHP Extension



               id:yokkuns 里 洋平

             PHP カンファレンス 2009




Yohei Sato                       1
アジェンダ
●
    自己紹介
●
    PHP Extension とは
●
    引数と返り値
●
    PHP の内部構造
●
    PHP Extension の作成



Yohei Sato              2
自己紹介
●   id:yokkuns
●
    名前 : 里 洋平
●
    職業 :Web エンジニア
●
    出身 : 種子島
●
    趣味 : プログラミングとかカラオケとか
●
    仕事は、 PHP では無く、 Perl

Yohei Sato                 3
PHP Extension とは?


Yohei Sato               4
PHP Extension とは
●
    PHP の拡張モジュール
●
    C/C++ で書かれてる
●
    例) mysql 、 sockets 、 SimpleXML など




Yohei Sato                          5
何故 PHP Extension ?
●
    過去に C で書かれた既存のライブラリを流用
    したい
●
    実行速度。 C なので、当然 PHP で書くより
    速い。




Yohei Sato                    6
引数と返り値



Yohei Sato            7
Extension で行う処理
●
    引数の取得
●
    データ作成処理
●
    返り値の出力




Yohei Sato                     8
データ型の問題
●
     そのままでは、データのやりとりが出来ない。



    $a = 100    $a




Yohei Sato                   9
データ型の問題
●
    そのままでは、データのやりとりが出来ない。

                     int a = 100

                 a




Yohei Sato                         10
そこで、 Zend API


$a = 100                           a == 100

              $a          long a

                   Zend
                    API




 Yohei Sato                             11
そこで、 Zend API


$a == 100                      long a =100

               $a          a

                    Zend
                     API




  Yohei Sato                           12
PHP の内部構造


Yohei Sato               13
zval 構造体
$a = 100

         zval 構造体
       value
       refcount
       type
       is_ref




Yohei Sato                   14
zval 構造体
$a = 100

         zval 構造体
       value
       refcount
       type
       is_ref

    type = IS_LONG


Yohei Sato                   15
zval 構造体
$a = 100

         zval 構造体
       value         zvalue_value 共用体
       refcount      lval
       type          dval
       is_ref        str
                     ht
    type = IS_LONG   obj



Yohei Sato                              16
zval 構造体
$a = 100

         zval 構造体
       value         zvalue_value 共用体
       refcount      lval               100
       type          dval
       is_ref        str
                     ht
    type = IS_LONG   obj



Yohei Sato                               17
文字列の場合
   $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
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
PHP の配列
●
    PHP の配列は、 C とかで言う配列とは別物
●
    順番付けられたマップ




Yohei Sato                    20
PHP の配列の構造

   zval       zvalue_value   hashtable

type                             a       zval
 = IS_ARRAY

                                b        zval


                                 c       zval



 Yohei Sato                                     21
PHP のオブジェクトの構造

zval       zvalue_value   zend_object_value
                               構造体
type                      handle
 = IS_OBJECT              handlers            zend_object_handlers
                                                     構 造体




   Yohei Sato                                               22
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
PHP Extension の作成



Yohei Sato              24
PHP Extension 作成方法
●
    昔は、 ext_skel コマンド
    –   スケルトンを生成し、それを直接修正

●
    今は、 CodeGen_PECL
    –   XML ファイルから PECL 用のコードを生成




Yohei Sato                         25
CodeGen_PECL を使って
         Extension を作成



Yohei Sato                26
・・・と思ったんですが




Yohei Sato             27
何と時間が無い!




Yohei Sato              28
と、言うわけで
         続きは、次回やります!



Yohei Sato             29
ご清聴ありがとうございました。




Yohei Sato    30
参考サイト
●
     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
参考書籍
●   Extending and Embedding PHP
    –   http://alturl.com/tu93

●
    PHP5 徹底攻略エクスパート編
    –   http://alturl.com/nymh




Yohei Sato                        32

Contenu connexe

En vedette

Prml last yokkuns
Prml last yokkunsPrml last yokkuns
Prml last yokkunsYohei Sato
 
工場における製造管理業務のシステム化構想立案
工場における製造管理業務のシステム化構想立案工場における製造管理業務のシステム化構想立案
工場における製造管理業務のシステム化構想立案Yohei Sato
 
高度試験午前Ⅱ - システム戦略
高度試験午前Ⅱ - システム戦略高度試験午前Ⅱ - システム戦略
高度試験午前Ⅱ - システム戦略Yohei Sato
 
Tokyowebmining5 yokkuns
Tokyowebmining5 yokkunsTokyowebmining5 yokkuns
Tokyowebmining5 yokkunsYohei Sato
 
Tokyor10 opening
Tokyor10 openingTokyor10 opening
Tokyor10 openingYohei Sato
 
Japan r2 lt_yokkuns
Japan r2 lt_yokkunsJapan r2 lt_yokkuns
Japan r2 lt_yokkunsYohei Sato
 

En vedette (8)

Prml last yokkuns
Prml last yokkunsPrml last yokkuns
Prml last yokkuns
 
工場における製造管理業務のシステム化構想立案
工場における製造管理業務のシステム化構想立案工場における製造管理業務のシステム化構想立案
工場における製造管理業務のシステム化構想立案
 
高度試験午前Ⅱ - システム戦略
高度試験午前Ⅱ - システム戦略高度試験午前Ⅱ - システム戦略
高度試験午前Ⅱ - システム戦略
 
Ml4nlp04 1
Ml4nlp04 1Ml4nlp04 1
Ml4nlp04 1
 
Tokyowebmining5 yokkuns
Tokyowebmining5 yokkunsTokyowebmining5 yokkuns
Tokyowebmining5 yokkuns
 
Tokyor10 opening
Tokyor10 openingTokyor10 opening
Tokyor10 opening
 
Japanr01
Japanr01Japanr01
Japanr01
 
Japan r2 lt_yokkuns
Japan r2 lt_yokkunsJapan r2 lt_yokkuns
Japan r2 lt_yokkuns
 

Plus de Yohei Sato

Tokyor60 r data_science_part1
Tokyor60 r data_science_part1Tokyor60 r data_science_part1
Tokyor60 r data_science_part1Yohei Sato
 
Tokyor60 opening
Tokyor60 openingTokyor60 opening
Tokyor60 openingYohei Sato
 
Tokyor45 カーネル多変量解析第2章 カーネル多変量解析の仕組み
Tokyor45 カーネル多変量解析第2章 カーネル多変量解析の仕組みTokyor45 カーネル多変量解析第2章 カーネル多変量解析の仕組み
Tokyor45 カーネル多変量解析第2章 カーネル多変量解析の仕組みYohei Sato
 
Tokyor42_r_datamining_18
Tokyor42_r_datamining_18Tokyor42_r_datamining_18
Tokyor42_r_datamining_18Yohei Sato
 
Tokyor42 ggplot2
Tokyor42 ggplot2Tokyor42 ggplot2
Tokyor42 ggplot2Yohei Sato
 
Tokyor39 yokkuns
Tokyor39 yokkunsTokyor39 yokkuns
Tokyor39 yokkunsYohei Sato
 
EasyHtmlReportの紹介
EasyHtmlReportの紹介EasyHtmlReportの紹介
EasyHtmlReportの紹介Yohei Sato
 
20131206 japan r
20131206 japan r20131206 japan r
20131206 japan rYohei Sato
 
Tokyor35 人工データの発生
Tokyor35 人工データの発生Tokyor35 人工データの発生
Tokyor35 人工データの発生Yohei Sato
 
ドリコムの分析環境とデータサイエンス活用事例
ドリコムの分析環境とデータサイエンス活用事例ドリコムの分析環境とデータサイエンス活用事例
ドリコムの分析環境とデータサイエンス活用事例Yohei Sato
 
R言語で学ぶマーケティング分析 競争ポジショニング戦略
R言語で学ぶマーケティング分析 競争ポジショニング戦略R言語で学ぶマーケティング分析 競争ポジショニング戦略
R言語で学ぶマーケティング分析 競争ポジショニング戦略Yohei Sato
 
Rでレポートメール
RでレポートメールRでレポートメール
RでレポートメールYohei Sato
 
Rで階層ベイズモデル
Rで階層ベイズモデルRで階層ベイズモデル
Rで階層ベイズモデルYohei Sato
 
Rでピボットテーブル
RでピボットテーブルRでピボットテーブル
RでピボットテーブルYohei Sato
 
第3回Japan rパネルディスカッション
第3回Japan rパネルディスカッション第3回Japan rパネルディスカッション
第3回Japan rパネルディスカッションYohei Sato
 
Tokyor26 data fusion
Tokyor26 data fusionTokyor26 data fusion
Tokyor26 data fusionYohei Sato
 
Tokyor24 yokkuns
Tokyor24 yokkunsTokyor24 yokkuns
Tokyor24 yokkunsYohei Sato
 
Tokyowebmining19 data fusion
Tokyowebmining19 data fusionTokyowebmining19 data fusion
Tokyowebmining19 data fusionYohei Sato
 
傾向スコア解析とUplift Modelling
傾向スコア解析とUplift Modelling傾向スコア解析とUplift Modelling
傾向スコア解析とUplift ModellingYohei Sato
 
Complex network ws_percolation
Complex network ws_percolationComplex network ws_percolation
Complex network ws_percolationYohei Sato
 

Plus de Yohei Sato (20)

Tokyor60 r data_science_part1
Tokyor60 r data_science_part1Tokyor60 r data_science_part1
Tokyor60 r data_science_part1
 
Tokyor60 opening
Tokyor60 openingTokyor60 opening
Tokyor60 opening
 
Tokyor45 カーネル多変量解析第2章 カーネル多変量解析の仕組み
Tokyor45 カーネル多変量解析第2章 カーネル多変量解析の仕組みTokyor45 カーネル多変量解析第2章 カーネル多変量解析の仕組み
Tokyor45 カーネル多変量解析第2章 カーネル多変量解析の仕組み
 
Tokyor42_r_datamining_18
Tokyor42_r_datamining_18Tokyor42_r_datamining_18
Tokyor42_r_datamining_18
 
Tokyor42 ggplot2
Tokyor42 ggplot2Tokyor42 ggplot2
Tokyor42 ggplot2
 
Tokyor39 yokkuns
Tokyor39 yokkunsTokyor39 yokkuns
Tokyor39 yokkuns
 
EasyHtmlReportの紹介
EasyHtmlReportの紹介EasyHtmlReportの紹介
EasyHtmlReportの紹介
 
20131206 japan r
20131206 japan r20131206 japan r
20131206 japan r
 
Tokyor35 人工データの発生
Tokyor35 人工データの発生Tokyor35 人工データの発生
Tokyor35 人工データの発生
 
ドリコムの分析環境とデータサイエンス活用事例
ドリコムの分析環境とデータサイエンス活用事例ドリコムの分析環境とデータサイエンス活用事例
ドリコムの分析環境とデータサイエンス活用事例
 
R言語で学ぶマーケティング分析 競争ポジショニング戦略
R言語で学ぶマーケティング分析 競争ポジショニング戦略R言語で学ぶマーケティング分析 競争ポジショニング戦略
R言語で学ぶマーケティング分析 競争ポジショニング戦略
 
Rでレポートメール
RでレポートメールRでレポートメール
Rでレポートメール
 
Rで階層ベイズモデル
Rで階層ベイズモデルRで階層ベイズモデル
Rで階層ベイズモデル
 
Rでピボットテーブル
RでピボットテーブルRでピボットテーブル
Rでピボットテーブル
 
第3回Japan rパネルディスカッション
第3回Japan rパネルディスカッション第3回Japan rパネルディスカッション
第3回Japan rパネルディスカッション
 
Tokyor26 data fusion
Tokyor26 data fusionTokyor26 data fusion
Tokyor26 data fusion
 
Tokyor24 yokkuns
Tokyor24 yokkunsTokyor24 yokkuns
Tokyor24 yokkuns
 
Tokyowebmining19 data fusion
Tokyowebmining19 data fusionTokyowebmining19 data fusion
Tokyowebmining19 data fusion
 
傾向スコア解析とUplift Modelling
傾向スコア解析とUplift Modelling傾向スコア解析とUplift Modelling
傾向スコア解析とUplift Modelling
 
Complex network ws_percolation
Complex network ws_percolationComplex network ws_percolation
Complex network ws_percolation
 

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

  • 1. 初めての PHP Extension id:yokkuns 里 洋平 PHP カンファレンス 2009 Yohei Sato 1
  • 2. アジェンダ ● 自己紹介 ● PHP Extension とは ● 引数と返り値 ● PHP の内部構造 ● PHP Extension の作成 Yohei Sato 2
  • 3. 自己紹介 ● id:yokkuns ● 名前 : 里 洋平 ● 職業 :Web エンジニア ● 出身 : 種子島 ● 趣味 : プログラミングとかカラオケとか ● 仕事は、 PHP では無く、 Perl Yohei Sato 3
  • 5. PHP Extension とは ● PHP の拡張モジュール ● C/C++ で書かれてる ● 例) mysql 、 sockets 、 SimpleXML など Yohei Sato 5
  • 6. 何故 PHP Extension ? ● 過去に C で書かれた既存のライブラリを流用 したい ● 実行速度。 C なので、当然 PHP で書くより 速い。 Yohei Sato 6
  • 8. Extension で行う処理 ● 引数の取得 ● データ作成処理 ● 返り値の出力 Yohei Sato 8
  • 9. データ型の問題 ● そのままでは、データのやりとりが出来ない。 $a = 100 $a Yohei Sato 9
  • 10. データ型の問題 ● そのままでは、データのやりとりが出来ない。 int a = 100 a Yohei Sato 10
  • 11. そこで、 Zend API $a = 100 a == 100 $a long a Zend API Yohei Sato 11
  • 12. そこで、 Zend API $a == 100 long a =100 $a a Zend API Yohei Sato 12
  • 14. zval 構造体 $a = 100 zval 構造体 value refcount type is_ref Yohei Sato 14
  • 15. zval 構造体 $a = 100 zval 構造体 value refcount type is_ref type = IS_LONG Yohei Sato 15
  • 16. zval 構造体 $a = 100 zval 構造体 value zvalue_value 共用体 refcount lval type dval is_ref str ht type = IS_LONG obj Yohei Sato 16
  • 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. 文字列の場合 $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. 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. PHP の配列 ● PHP の配列は、 C とかで言う配列とは別物 ● 順番付けられたマップ Yohei Sato 20
  • 21. PHP の配列の構造 zval zvalue_value hashtable type a zval = IS_ARRAY b zval c zval Yohei Sato 21
  • 22. PHP のオブジェクトの構造 zval zvalue_value zend_object_value 構造体 type handle = IS_OBJECT handlers zend_object_handlers 構 造体 Yohei Sato 22
  • 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
  • 25. PHP Extension 作成方法 ● 昔は、 ext_skel コマンド – スケルトンを生成し、それを直接修正 ● 今は、 CodeGen_PECL – XML ファイルから PECL 用のコードを生成 Yohei Sato 25
  • 26. CodeGen_PECL を使って Extension を作成 Yohei Sato 26
  • 29. と、言うわけで 続きは、次回やります! Yohei Sato 29
  • 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. 参考書籍 ● Extending and Embedding PHP – http://alturl.com/tu93 ● PHP5 徹底攻略エクスパート編 – http://alturl.com/nymh Yohei Sato 32