PHPカンファレンス[T-109]初めてのPHP Extension
- 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
- 9. データ型の問題
●
そのままでは、データのやりとりが出来ない。
$a = 100 $a
Yohei Sato 9
- 10. データ型の問題
●
そのままでは、データのやりとりが出来ない。
int a = 100
a
Yohei Sato 10
- 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
- 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