スポンサーリンク

このドキュメントの内容は、以下の通りです。

はじめに


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]

スポンサーリンク
スポンサーリンク
 
いつもシェア、ありがとうございます!


もっと情報を探しませんか?

関連記事

最近の記事

人気のページ

スポンサーリンク
 

過去ログ

2020 : 01 02 03 04 05 06 07 08 09 10 11 12
2019 : 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

サイト

Vim入門

C言語入門

C++入門

JavaScript/Node.js入門

Python入門

FreeBSD入門

Ubuntu入門

セキュリティ入門

パソコン自作入門

ブログ

トップ


プライバシーポリシー