PHP extensionの作り方 配列を返す方法
スポンサーリンク
このドキュメントの内容は、以下の通りです。
はじめに
PHP エクステンションで関数の戻り値の型を配列にする方法について紹介します。
PHP エクステンションの作り方については、下記のページを参考にしてください。
- [2013-02-17-1] PHP extensionの作り方 5分でできるHello world!
- [2013-02-18-1] PHP extensionの作り方 CodeGen_PECLを使ってC++で作る方法
やり方は簡単で、以下の通りです。
- プロトタイプの戻り値の型を array にする。
- return_valueという変数に値を追加する。
プロトタイプ
関数の戻り値型は、array に設定します。
<proto>array hello_array()</proto>
勝手に array_init のコードが追加されるので自分で記述する必要はありません。。
配列を操作するAPI
add_next_index 系の関数は、配列に値を追加します。
PHP で言えば、以下の通りです。
$array = array (); $array[] = "Hello";
zend_symtable_update は、配列の添字(key)を指定し、値(value)をセットします。
PHPでいえば、以下の通りです。
$array['World'] = '1';
spec.xml
hello_array は、以下のデータを返すプログラムです。
Array ( [0] => Hello [World] => ! )
<function name="hello_array" role="public"> <proto>array hello_array()</proto> <summary>Return array.</summary> <description><?data Return array. ?></description> <code><?data char *s1 = "Hello"; char *s2 = "World"; char *s3 = "!"; zval *tmp; MAKE_STD_ZVAL(tmp); ZVAL_STRING(tmp,s3,1); add_next_index_string(return_value, s1, strlen(s1) ); zend_symtable_update(Z_ARRVAL_P(return_value), s2, strlen(s2) + 1, (void*)&tmp, sizeof(zval*), NULL); ?></code> <test> <code><?data print_r ( hello_array() ); ?></code> <result mode="plain"><?data Array ( [0] => Hello [World] => ! ) ?></result> </test> </function>
helloworld.c
pecl-gen コマンドで生成されたソースの一部。
/* {{{ proto array hello_array() Return array. */ PHP_FUNCTION(hello_array) { if (ZEND_NUM_ARGS()>0) { WRONG_PARAM_COUNT; } array_init(return_value); do { char *s1 = "Hello"; char *s2 = "World"; char *s3 = "!"; zval *tmp; MAKE_STD_ZVAL(tmp); ZVAL_STRING(tmp,s3,1); add_next_index_string(return_value, s1, strlen(s1) ); zend_symtable_update(Z_ARRVAL_P(return_value), s2, strlen(s2) + 1, (void*)&tmp, sizeof(zval*), NULL); } while (0); } /* }}} hello_array */
以上で、簡単に配列を返すことができます。
関連項目
- [2013-02-17-1] PHP extensionの作り方 5分でできるHello world!
- [2013-02-18-1] PHP extensionの作り方 CodeGen_PECLを使ってC++で作る方法
参照しているページ (サイト内): [2013-02-27-1] [2013-02-20-1]
スポンサーリンク
スポンサーリンク
いつもシェア、ありがとうございます!
もっと情報を探しませんか?
関連記事
最近の記事
- パナソニック ジェットウォッシャードルツ EW-DJ61-Wのホースの修理
- LinuxセキュリティモジュールIntegrity Policy Enforcement
- アマゾンのEcho Show 5を買ったのでレビューします
- アマゾンのサイバーマンデーはAlexa Echo Show 5が安い
- Android スマートフォン OnePlus 7T と OnePlus 7の違い
- Android スマートフォン OnePlus 7 をAndroid10にアップデートしてみた
- クレジットカードのバーチャルカードの比較のまとめ
- 活動量計 Xiaomi Mi Band 4を買ってみたのでレビュー
- Android スマートフォン OnePlus 7 のレビュー
- AliExpressでスマートフォンを買い物してみた
- パソコンのホコリ対策 レンジフードフィルターと養生テープ
- 80PLUS GOLDのPC電源ユニットAntec NeoEco 750 Goldのレビュー
- イギリスの付加価値税 VAT は払い戻しを受けられる
- イギリスのロンドンでスーツケースなど荷物を預けられる場所は
- イギリスのロンドンで地下鉄やバスに乗るならオイスターカードを使おう
- イギリスのヒースロー空港からロンドン市内への行き方
- 航空便でほかの航空会社に乗り継ぎがある場合のオンラインチェックイン
- SFC会員がANA便ではなくベトナム航空のコードシェアを試して解ったこと
- ベトナムの入国審査でeチケットの掲示が必要だった話
- シアトルの交通ICカードはオルカカード(Orca)です
人気のページ
- Windows7 IME 辞書ツールで単語の登録に失敗しました
- C言語 popen()でコマンドを実行して出力を読み込む
- Windows7で休止状態にする方法
- CentOS MySQLの起動、停止、再起動
- loggerコマンドでsyslogにエラーを出力する方法
- パソコンパーツの買取をしてくれる店のまとめ
- Java Mapの使い方 get(),put(),remove(),size(),clear()
- 楽天のRポイントカードを作ってみた
- iPhone 5 から iPhone 6 に乗り換えたのでレビュー
- netstatコマンドのステータスの意味
スポンサーリンク
過去ログ
2020 : 01 02 03 04 05 06 07 08 09 10 11 122019 : 01 02 03 04 05 06 07 08 09 10 11 12
2018 : 01 02 03 04 05 06 07 08 09 10 11 12
2017 : 01 02 03 04 05 06 07 08 09 10 11 12
2016 : 01 02 03 04 05 06 07 08 09 10 11 12
2015 : 01 02 03 04 05 06 07 08 09 10 11 12
2014 : 01 02 03 04 05 06 07 08 09 10 11 12
2013 : 01 02 03 04 05 06 07 08 09 10 11 12
2012 : 01 02 03 04 05 06 07 08 09 10 11 12
2011 : 01 02 03 04 05 06 07 08 09 10 11 12
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
2004 : 01 02 03 04 05 06 07 08 09 10 11 12
2003 : 01 02 03 04 05 06 07 08 09 10 11 12