cvs: phpdoc-ja /internals/zendapi arguments.xml
| From: | TAKAGI Masahiro | Date: | Sun, 02 Jul 2006 04:55:29 +0000 |
| Subject: | cvs: phpdoc-ja /internals/zendapi arguments.xml | ||
| Groups: | php.doc.ja | ||
| Request: | Send a blank email to doc-ja+get-1578@lists.php.net to get a copy of this message | ||
takagi Sun Jul 2 04:55:29 2006 UTC
Added files:
/phpdoc-ja/internals/zendapi arguments.xml
Log:
added Japanese translation.
http://cvs.php.net/viewvc.cgi/phpdoc-ja/internals/zendapi/arguments.xml?view=markup&rev=1.1 Index: phpdoc-ja/internals/zendapi/arguments.xml +++ phpdoc-ja/internals/zendapi/arguments.xml <?xml version="1.0" encoding="utf-8"?> <!-- $Revision: 1.1 $ --> <!-- EN-Revision: 1.3 Maintainer: takagi Status: ready --> <sect1 id="zend.arguments"> <title>弿°ã®æ±ã</title> <para> è¨èªãæ¡å¼µããéã®æãéè¦ãªåé¡ã®ã²ã¨ã¤ã¯ã 弿°ã¨ãã¦æ¸¡ããããã¼ã¿ã®æ±ãã§ããããã¦ãã®æ¡å¼µã¢ã¸ã¥ã¼ã«ã¯ã ä½ããã®å ¥åãã¼ã¿ãæ±ã (ãããã¯ãã©ã¡ã¼ã¿ãåãåã£ã¦ ç¹å®ã®åä½ãè¡ã) ããã«ä½ããã¦ãã¾ããããã¦ã PHP 㨠C è¨èªã®éã§ãã¼ã¿ãããåãããããã®å¯ä¸ã®æ¹æ³ã 颿°ã®å¼æ°ã¨ãªãã¾ãã äºåã«å®ç¾©ããã°ãã¼ãã«å¤ã使ç¨ãã¦ãã¼ã¿ã交æãããã¨ããã¡ããå¯è½ã§ãã (ãã®æ¹æ³ã«ã¤ãã¦ãå¾è¿°ãã¾ã)ãããããªæå³ã§ãã®æ¹æ³ã¯é¿ããã¹ãã§ãã ããã¯ã¾ã£ãããå§ãã§ããªãææ®µã§ãã </para> <para> PHP ã§ã¯ãæ£å¼ã«é¢æ°ãå®£è¨ (declare) ãããã¨ã¯ããã¾ããã ãã®ããã颿°ã³ã¼ã«ã®æ§æã¯å®å ¨ã«åçãªãã®ã¨ãªãã ã¨ã©ã¼ãã§ãã¯ã¯è¡ããã¾ããã ã³ã¼ã«æ¹æ³ãæ£ãããã©ããã調ã¹ãã®ã¯ãã¦ã¼ã¶ãæ¸ãã³ã¼ãã®å½¹å²ã¨ãªãã¾ãã ä¾ãã°ããã颿°ã«å¯¾ãã¦å¼æ°ãã²ã¨ã¤ã ãæå®ãã¦ã³ã¼ã«ããå¾ã åã颿°ã«å¯¾ã㦠4 ã¤ã®å¼æ°ãæå®ãã¦ã³ã¼ã«ãããã¨ãå¯è½ã§ãã ã©ã¡ãã®ã³ã¼ã«ã«ã¤ãã¦ããææ³çã«ã¯ã¾ã£ããæ£ãããã®ã¨ãªãã¾ãã </para> <sect2 id="zend.arguments.count"> <title>弿°ã®æ°ã®å®ç¾©</title> <para> PHP ãæ£å¼ãªé¢æ°å®£è¨ãè¡ããªãããã«ã³ã¼ã«æã®ææ³ãã§ãã¯ãè¡ãããªãã ã¾ã PHP ãå¯å¤å¼æ°ããµãã¼ããã¦ãããªã©ã®çç±ã§ã å®éã«ãã®é¢æ°ã«ããã¤ã®å¼æ°ã渡ãããã®ããç¥ããªããã°ãªããªããã¨ãããã§ãããã ãã®ãããªå ´åã«ã¯ <literal>ZEND_NUM_ARGS</literal> ãã¯ãã使ç¨ãã¾ãã 以åã®ãã¼ã¸ã§ã³ã® PHP ã§ã¯ãã³ã¼ã«æã®å¼æ°ã®æ°ãåå¾ããããã« ãã®ãã¯ãã¯é¢æ°ã®ããã·ã¥ãã¼ãã«ã®ã¨ã³ã㪠<envar>ht</envar> ã使ç¨ãã¦ãã¾ããããã®ã¨ã³ããªã¯ <literal>INTERNAL_FUNCTION_PARAMETERS</literal> ã®ãªã¹ãããæ¸¡ããã¾ããã 颿°ã«æ¸¡ããã弿°ã®æ°ã¯ä»ã§ã¯ <envar>ht</envar> èªä½ã«å«ã¾ãã¦ããã®ã§ã<literal>ZEND_NUM_ARGS</literal> ã¯ããã¼ã®ãã¯ãã¨ãªã£ã¦ãã¾ã (å®éã®å®ç¾©ã¯ <filename>zend_API.h</filename> ãåç §ãã ãã)ã ããããä»å¾ã®ãã¨ãèããã¨ã å¼ã³åºãã¤ã³ã¿ã¼ãã§ã¤ã¹ãå¤ãã£ã¦ãäºææ§ãä¿ã¡ç¶ããããããã« ãã®ãã¯ãã使ç¨ãã¦ãããã¨ããå§ããã¾ãã <emphasis>注æ:</emphasis> æã® PHP ã§ã¯ããã®ãã¯ãã¨åçã®åããããã®ã¯ <literal>ARG_COUNT</literal> ãã¯ãã§ããã </para> <para> 弿°ã®æ°ãæ£ãããã©ããã調ã¹ãã³ã¼ãã¯æ¬¡ã®ããã«ãªãã¾ãã <programlisting> if(ZEND_NUM_ARGS() != 2) WRONG_PARAM_COUNT; </programlisting> 颿°ã³ã¼ã«æã®å¼æ°ã®æ°ã 2 ã¤ã§ãªãã£ãå ´åã ããã¯ã¨ã©ã¼ã¡ãã»ã¼ã¸ã表示ãã¦çµäºãã¾ãã ä¸ã®ã³ã¼ãã¯ã<literal>WRONG_PARAM_COUNT</literal> ãã¯ãã®ä½¿ç¨ä¾ã§ãããã¾ãã ããã¯ã以ä¸ã®ãããªæ¨æºçãªã¨ã©ã¼ã¡ãã»ã¼ã¸ãçæããããã«ä½¿ç¨ãããã®ã§ãã <![CDATA[ "Warning: Wrong parameter count for firstmodule() in /home/www/htdocs/firstmod.php on line 5" ]]> </para> <para> ãã®ãã¯ãã¯ããã©ã«ãã®ã¨ã©ã¼ã¡ãã»ã¼ã¸ã表示ããå¼ã³åºãå ã«å¶å¾¡ãæ»ãã¾ãã ãã®ãã¯ãã®å®ç¾©ãã¾ã <filename>zend_API.h</filename> ã«ããã¾ãããã®ãããªå 容ã§ãã <programlisting> ZEND_API void wrong_param_count(void); #define WRONG_PARAM_COUNT { wrong_param_count(); return; } </programlisting> ã覧ã®éãããã®ãã¯ã㯠<function>wrong_param_count</function> ã¨ããååã®å é¨é¢æ°ãã³ã¼ã«ãã¦ãã¾ãã ãã®é¢æ°ãè¦åã表示ãã¦ãã¾ããç¬èªã®ã¨ã©ã¼ã¡ãã»ã¼ã¸ã使ããããã®æ¹æ³ã«ã¤ãã¦ã¯ã å¾åã®ç¯ãæ å ±ã®è¡¨ç¤ºããåç §ãã ããã </para> </sect2> <sect2 id="zend.arguments.retrieval"> <title>弿°ã®åå¾</title> <note> <title> ãã©ã¡ã¼ã¿ã®ãã¼ã¹ç¨ã®æ°ãã API </title> <para> ãã®ç« ã§ã¯ãAndrei Zmievski ã«ããæ°ãã Zend ãã©ã¡ã¼ã¿ãã¼ã¹ç¨ API ã説æãã¾ãããã® API 㯠PHP 4.0.6 ãã PHP 4.1.0 ã®éã®éçºä¸ã«å°å ¥ããã¾ããã </para> </note> <para> ãã©ã¡ã¼ã¿ã®ãã¼ã¹ã¯ãã¾ãã«ããããµããæä½ã§ãããå°ãéå±ã«æãããã¨ãããã§ãããã ã¾ããã¨ã©ã¼ãã§ãã¯ãã¨ã©ã¼ã¡ãã»ã¼ã¸ã¯æ¨æºåããã¦ããã»ããããã§ãããã PHP 4.1.0 以éã§ã¯ããã©ã¡ã¼ã¿ã®ãã¼ã¹ç¨ã®æ°ãã API ã使ç¨ãããã¨ã§ãããå®ç¾ã§ãã¾ãã ãã® API ã¯ãã©ã¡ã¼ã¿ã®åãåããåçã«åç´åãã¦ãã¾ããã å¯å¤å¼æ°ãåãåã颿°ã«ã¯ä½¿ç¨ã§ããªãã¨ããå¼±ç¹ãããã¾ãã ãããã大åã®é¢æ°ã§ã¯ã弿°ã®æ°ã¯åºå®ã§ãããã®ããã æ°ããæ¨æºã¨ãã¦ããã®ãã¼ã¹ç¨ API ã®ä½¿ç¨ãæ¨å¥¨ãã¾ãã </para> <para> ãã©ã¡ã¼ã¿ã®ãã¼ã¹ç¨é¢æ°ã®ãããã¿ã¤ãã¯ããã®ããã«ãªãã¾ãã <programlisting> int zend_parse_parameters(int num_args TSRMLS_DC, char *type_spec, ...); </programlisting> æåã®å¼æ°ã«ãããªãã®é¢æ°ãåãåããã©ã¡ã¼ã¿ã®æ°ãæå®ãã¾ãã ããã§ã¯ <literal>ZEND_NUM_ARGS()</literal> ã使ç¨ã§ãã¾ãã 2 çªç®ã®ãã©ã¡ã¼ã¿ã¯ã常㫠<literal>TSRMLS_CC</literal> ãã¯ãã§ãªããã°ãªãã¾ããã3 çªç®ã®å¼æ°ã¯ã ããªãã®é¢æ°ãåãåã弿°ã®æ°ããã³åã表ãæååã§ãã ããã¯ãprintf ã®æ¸å¼æå®æååã«ãã£ã¦åºåå 容ãæå®ããã®ã«ä¼¼ã¦ãã¾ãã ããã¦æå¾ã«ããã©ã¡ã¼ã¿ã®å¤ãåãåã夿°ã¸ã®ãã¤ã³ã¿ãæå®ãã¾ãã </para> <para> 常ã«å¸æéãã®åã§ãã¼ã¿ãåãåããã¨ãã§ããããã <function>zend_parse_parameters</function> ã¯å¯è½ãªç¯å²ã§å夿ãè¡ãã¾ãã ããããã¹ã«ã©ã¼åã¯å¥ã®ã¹ã«ã©ã¼æ¹ã«å¤æãããã¨ãå¯è½ã§ãã ããããè¤éãªå (é åããªãã¸ã§ã¯ããããã¯ãªã½ã¼ã¹) ã¨ã¹ã«ã©ã¼åã®éã®å夿ã¯ã§ãã¾ããã </para> <para> ãã©ã¡ã¼ã¿ã®åå¾ã«æåãããã¤å夿ã§ã¨ã©ã¼ãçºçããªãã£ãå ´å㯠ãã®é¢æ°ã¯ <literal>SUCCESS</literal> ãè¿ãã¾ãããã以å¤ã®å ´å㯠<literal>FAILURE</literal> ãè¿ãã¾ããã¾ãã ããã©ã¡ã¼ã¿ã®æ°ãä¸è´ããªãããå夿ãã§ããªãã£ãã ãªã©ã®æ å ±ãå«ãã¨ã©ã¼ã¡ãã»ã¼ã¸ãåºåãã¾ãã </para> <para> åºåãããã¨ã©ã¼ã¡ãã»ã¼ã¸ã¯ãä¾ãã°æ¬¡ã®ãããªãã®ã«ãªãã¾ãã <screen> Warning - ini_get_all() requires at most 1 parameter, 2 given Warning - wddx_deserialize() expects parameter 1 to be string, array given </screen> ãã¡ããããããã®ã¡ãã»ã¼ã¸ã«ã¯ã¨ã©ã¼ã®çºçãããã¡ã¤ã«åãè¡çªå·ãå«ã¾ãã¦ãã¾ãã </para> <para> åãæå®ããæåã®ä¸è¦§ãããã«ã¾ã¨ãã¾ãã <itemizedlist> <listitem> <para><literal>l - </literal>long</para> </listitem> <listitem> <para><literal>d - </literal>double</para> </listitem> <listitem> <para><literal>s - </literal>string (null ãã¤ãã®å¯è½æ§ããã) ããã³ãã®é·ã</para> </listitem> <listitem> <para><literal>b - </literal>boolean</para> </listitem> <listitem> <para><literal>r - </literal><literal>zval*</literal> ã«ä¿åããããªã½ã¼ã¹</para> </listitem> <listitem> <para><literal>a - </literal><literal>zval*</literal> ã«ä¿åãããé å</para> </listitem> <listitem> <para><literal>o - </literal><literal>zval*</literal> ã«ä¿åããã (ããããã¯ã©ã¹ã®) ãªãã¸ã§ã¯ã</para> </listitem> <listitem> <para><literal>O - </literal><literal>zval*</literal> ã«ä¿åããã (ã¯ã©ã¹ã¨ã³ããªã§æå®ããã¦ããã¯ã©ã¹ã®) ãªãã¸ã§ã¯ã</para> </listitem> <listitem> <para><literal>z - </literal><literal>zval*</literal> èªä½</para> </listitem> </itemizedlist> 以ä¸ã®æåã¯ãåæå®æååã®ä¸ã§ç¹å¥ãªæå³ãæã¡ã¾ãã <itemizedlist> <listitem> <para> <literal>| - </literal>æ®ãã®ãã©ã¡ã¼ã¿ããªãã·ã§ã³ã§ãããã¨ã表ãã¾ãã ãããã®ãã©ã¡ã¼ã¿ã«å¯¾å¿ããä¿åç¨å¤æ°ã¯ã æ¡å¼µã¢ã¸ã¥ã¼ã«èªèº«ã«ãã£ã¦ããã©ã«ãå¤ã§åæåãããªããã°ãªãã¾ããã ãªããªãããã©ã¡ã¼ã¿ã渡ããã¦ããªããã°ãã¼ã¹é¢æ°ãééããªãããã§ãã </para> </listitem> <listitem> <para> <literal>/ - </literal>ãã©ã¡ã¼ã¿ã®å¾ã«ãã®æåãç¶ããã¨ã ãã®ãã©ã¡ã¼ã¿ã«å¯¾ã㦠<function>SEPARATE_ZVAL_IF_NOT_REF</function> ãã³ã¼ã«ãã¾ããããã«ããããã®ãã©ã¡ã¼ã¿ãåç §ã§ãªããã°ãã©ã¡ã¼ã¿ã®ã³ãã¼ã使ããã¾ãã </para> </listitem> <listitem> <para> <literal>! - </literal>ãã©ã¡ã¼ã¿ã®å¾ã«ãã®æåãç¶ããã¨ã ãã®ãã©ã¡ã¼ã¿ã¯æå®ããåããã㯠<literal>NULL</literal> ã¨ãªãã¾ã (aãoãOãr ããã³ z ã«ã¤ãã¦ã®ã¿é©ç¨å¯è½)ã <literal>NULL</literal> å¤ã渡ãããå ´åã¯ã ä¿åãã¤ã³ã¿ã®å¤ã <literal>NULL</literal> ã«è¨å®ããã¾ãã </para> </listitem> </itemizedlist> </para> <para> ãã®é¢æ°ã®ä½¿ç¨æ³ã«ã¤ãã¦èª¬æããã«ã¯ã å®éã®ä¾ãè¦ã¦ããã ãã®ããã¡ã°ãã§ãããã <programlisting> <![CDATA[ /* longãæååã¨ãã®é·ãããã㦠zval ãåãåãã¾ãã*/ long l; char *s; int s_len; zval *param; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lsz", &l, &s, &s_len, ¶m) == FAILURE) { return; } /* my_ce ã§æå®ããã¯ã©ã¹ã®ãªãã¸ã§ã¯ããããã¦ãªãã·ã§ã³ã§ double å¤ãåãåãã¾ãã*/ zval *obj; double d = 0.5; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "O|d", &obj, my_ce, &d) == FAILURE) { return; } /* ãªãã¸ã§ã¯ã (ããã㯠null)ãããã¦é åãåãåãã¾ãã ãªãã¸ã§ã¯ãã« null ãæ¸¡ãããå ´åãobj 㯠NULL ã¨ãªãã¾ãã*/ zval *obj; zval *arr; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "O!a", &obj, &arr) == FAILURE) { return; } /* é åã®ã³ãã¼ãåãåãã¾ãã*/ zval *arr; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a/", &arr) == FAILURE) { return; } /* æåã® 3 ã¤ã®ãã©ã¡ã¼ã¿ã®ã¿ãåãåãã¾ã (å¯å¤å¼æ°ã®é¢æ°ã®å ´åã«æç¨ã§ã)ã*/ zval *z; zend_bool b; zval *r; if (zend_parse_parameters(3, "zbr!", &z, &b, &r) == FAILURE) { return; } ]]> </programlisting> </para> <para> æå¾ã®ä¾ã§ã<function>ZEND_NUM_ARGS</function> ã使ç¨ããã«ãã©ã¡ã¼ã¿æ°ã 3 ã¨ãã¦ãããã¨ã«æ³¨ç®ãã¾ãããã ãããããã¨ã§ãå¯å¤å¼æ°ã®é¢æ°ã«å¯¾ãã¦æä½éå¿ è¦ãªå¼æ°ã®æ°ãæå®ãããã¨ãã§ãã¾ãã ãã¡ãããããæ®ãã®ãã©ã¡ã¼ã¿ã«ã¤ãã¦ãå¦çãããã®ãªã <function>zend_get_parameters_array_ex</function> ã使ç¨ãã¦ãããåå¾ããªããã°ãªãã¾ããã </para> <para> æ¡å¼µçã®ãã¼ã¹é¢æ°ãåå¨ãã¾ãã ããã¯ã追å ã®ãã©ã°ã弿°ã«æå®ãããã¨ã§ãã®åããå¶å¾¡ãã¾ãã <programlisting> int zend_parse_parameters_ex(int flags, int num_args TSRMLS_DC, char *type_spec, ...); </programlisting> </para> <para> ç¾å¨ã¯ã渡ããã¨ã®ã§ãããã©ã°ã¯ <literal>ZEND_PARSE_PARAMS_QUIET</literal> ã ãã§ãããããæå®ããã¨ãå¦çä¸ã«çºçããã¨ã©ã¼ã¡ãã»ã¼ã¸ãåºåããªãããã«ãªãã¾ãã ããã¯ããã®é¢æ°ããã¾ãã¾ãªå½¢å¼ã®å¼æ°ãåãåããã¨ãæ³å®ãã¦ããã ç¬èªã®ã¨ã©ã¼ã¡ãã»ã¼ã¸ã§å¯¾å¿ãããå ´åãªã©ã«æç¨ã§ãã </para> <para> ä¾ãã°ã3 ã¤ã® long å¤ããã㯠3 ã¤ã®æååãåãåã颿°ã¯ã ãã®ããã«ãªãã¾ãã <programlisting> <![CDATA[ long l1, l2, l3; char *s; if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, "lll", &l1, &l2, &l3) == SUCCESS) { /* long ã®å ´å */ } else if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS(), "s", &s, &s_len) == SUCCESS) { /* æååã®å ´å */ } else { php_error(E_WARNING, "%s() takes either three long values or a string as argument", get_active_function_name(TSRMLS_C)); return; }]]> </programlisting> </para> <para> ä¸ã§èª¬æãããããã®å ´åã«ã¤ãã¦ãããã©ã¡ã¼ã¿ã®åå¾å¦çã¯æ éã«è¡ãã¾ãããã ãã以å¤ã®ä¾ã«ã¤ãã¦ã¯ãPHP ã«å梱ããã¦ããæ¡å¼µã¢ã¸ã¥ã¼ã«ã®ã½ã¼ã¹ã åèã«ãã¦ãã ããã便å©ãªä½¿ç¨æ³ãããããçºè¦ã§ããã§ãããã </para> </sect2> <sect2 id="zend.arguments.deprecated-retrieval"> <title>弿°ã®åå¾ã®å¤ãæ¹æ³ (廿¢äºå®)</title> <note> <title> 廿¢äºå®ã®ãã©ã¡ã¼ã¿ãã¼ã¹ç¨ API </title> <para> ãã® API ã¯éæ¨å¥¨ã§ããç¾å¨ã¯æ°ãã ZEND ãã©ã¡ã¼ã¿ãã¼ã¹ API ã使ç¨ããã¦ãã¾ãã </para> </note> <para> 弿°ã®æ°ããã§ãã¯ãçµããããæ¬¡ã¯å¼æ°ãã®ãã®ã«ã¢ã¯ã»ã¹ããªããã°ãªãã¾ããã ãã®ããã«ã¯ <function>zend_get_parameters_ex</function> ã®å©ããåãããã¨ã«ãªãã¾ãã <programlisting> <![CDATA[ zval **parameter; if(zend_get_parameters_ex(1, ¶meter) != SUCCESS) WRONG_PARAM_COUNT; ]]> </programlisting> ãã¹ã¦ã®å¼æ°ã¯ <envar>zval</envar> ã³ã³ããã«æ ¼ç´ããã <emphasis>äºéã«</emphasis>ãã¤ã³ããããå¿ è¦ãããã¾ãã ä¸ã®ã³ã¼ãã¯ã弿°ãåå¾ãã¦ããããã¤ã³ã¿ <envar>parameter</envar> ã§ã¢ã¯ã»ã¹ã§ããããã«ãã¦ãã¾ãã </para> <para> <function>zend_get_parameters_ex</function> ã¯ãå°ãªãã¨ã 2 ã¤ã®å¼æ°ãåãä»ãã¾ãã æåã®å¼æ°ã¯ãåå¾ãã弿°ã®æ°ã§ã (ããã¯ã 颿°ãã³ã¼ã«ãããéã®å¼æ°ã®æ°ã¨åãã§ãªããã°ãªãã¾ããã ãã®ãããå¼ã³åºãæ§æããã¡ãã¨ãã§ãã¯ãããã¨ã大åã«ãªãã¾ã)ã 2 çªç® (ããã³ãã以é) ã®å¼æ°ã¯ã<envar>zval</envar> ã¸ã®ãã¤ã³ã¿ã¸ã®ãã¤ã³ã¿ã¸ã®ãã¤ã³ã¿ (ãªãã¦ããããããã¨ã§ããã!) ã§ãã ãããå¿ è¦ã«ãªãã®ã¯ãç§ãã¡ã使ãã颿°å ã®ãã¼ã«ã« <envar>**zval</envar> ã管çããããã« Zend ã¯å é¨ã§ <envar>**zval</envar> ã使ç¨ãã¦ããã <function>zend_get_parameters_ex</function> ã¯ããã«å¯¾ãããã¤ã³ã¿ãå¿ è¦ã¨ããããã§ãã </para> <para> <function>zend_get_parameters_ex</function> ã®è¿ãå¤ã¯ <literal>SUCCESS</literal> ããã㯠<literal>FAILURE</literal> ã§ããããã (å½ç¶ã®ãã¨ã) æåãããã¨ããããã¯å¼æ°ã®å¦çã«å¤±æãããã¨ã示ãã¾ãã ãã£ã¨ããããã¡ãªå¤±æã®åå ã¯ããã©ã¡ã¼ã¿ã®æ°ãééãããã¨ã§ãã ãã®å ´åã¯ã <literal>WRONG_PARAM_COUNT</literal> ã§é¢æ°ãæããªããã°ãªãã¾ããã </para> <para> è¤æ°ã®å¼æ°ãåãåãã«ã¯ããã®ããã«ãã¾ãã <programlisting> <![CDATA[ zval **param1, **param2, **param3, **param4; if(zend_get_parameters_ex(4, ¶m1, ¶m2, ¶m3, ¶m4) != SUCCESS) WRONG_PARAM_COUNT; ]]> </programlisting> </para> <para> <function>zend_get_parameters_ex</function> ãã¨ã©ã¼ã¨ãªãã®ã¯ã å®éã®æ°ããå¤ãã®ãã©ã¡ã¼ã¿ãåå¾ãããã¨ããå ´åã®ã¿ã§ãã ããå®éã®é¢æ°ã 5 ã¤ã®å¼æ°ã§ã³ã¼ã«ãããã®ã« <function>zend_get_parameters_ex</function> ã§ã¯ 3 ã¤ããåå¾ããªãã£ãå ´åã ä½ãã¨ã©ã¼ã¯çºçãããæåã® 3 ã¤ã®ãã©ã¡ã¼ã¿ãåå¾ããã¾ãã ç¶ã㦠<function>zend_get_parameters_ex</function> ãã³ã¼ã«ããã¨ãã¦ãã æ®ãã®å¼æ°ãåå¾ã§ããããã§ã¯ãªãæåã¨åããã®ãå¾ãããã ãã§ãã </para> </sect2> <sect2 id="zend.arguments.variable"> <title>å¯å¤å¼æ° / ãªãã·ã§ã³ãã©ã¡ã¼ã¿ã®æ±ã</title> <para> ããããªãã®é¢æ°ãå¯å¤å¼æ°ãåãä»ããã®ãªãã ããã»ã©ã®ä¾ã次åã®çã¨ãªããã¨ãããã§ãããããã ã åãããå¯è½æ§ã®ãããã¹ã¦ã®å¼æ°ã®æ°ã«å¯¾ãã¦ããããã <function>zend_get_parameters_ex</function> ã³ã¼ã«ããªããã°ãªããã 䏿ºãæ®ãã¾ãã </para> <para> ãã®ãããªå ´åã«ã¯ã <function>zend_get_parameters_array_ex</function> 颿°ã使ããã¨ãã§ãã¾ãã ããã¯ã弿°ã®æ°ãæå®ãã¦ãã¼ã¿ãåå¾ãããããé åã«æ ¼ç´ãã¾ãã <programlisting> <![CDATA[ zval **parameter_array[4]; /* 弿°ã®æ°ãåå¾ãã¾ã */ argument_count = ZEND_NUM_ARGS(); /* 弿°ã®æ°ã®ç¯å² (æä½ 2 åãæå¤§ 4 å) */ /* ãæºããã¦ãããã©ããã調ã¹ã¾ã */ if(argument_count < 2 || argument_count > 4) WRONG_PARAM_COUNT; /* 弿°ã®æ°ãæ£ããã£ãã®ã§ããã®å 容ãåå¾ãã¾ã */ if(zend_get_parameters_array_ex(argument_count, parameter_array) != SUCCESS) WRONG_PARAM_COUNT; ]]> </programlisting> ã¾ãã弿°ã®æ°ã調ã¹ã¦ãããäºæããç¯å²å ã«ãããã¨ã確ããã¾ãã ãããã <function>zend_get_parameters_array_ex</function> ã使ç¨ãã 弿°ã®å¤ã¸ã®ãã¤ã³ã¿ã <envar>parameter_array</envar> ã«æ ¼ç´ãã¾ãã </para> <para> ãããé常ã«ãã¾ãå®è£ ããã®ããPHP ã® <function>fsockopen</function> ãå¦çããã³ã¼ãã§ãããã®ã³ã¼ã㯠<filename>ext/standard/fsock.c</filename> ã«ããã <xref linkend='example.fsockopen'/> ã§è¦ããã¨ãã§ãã¾ãã ãã®ã½ã¼ã¹ã®ä¸ã«ç¥ããªã颿°ãå«ã¾ãã¦ããã¨ãã¦ããç¾æç¹ã§ã¯åé¡ããã¾ããã ããã«ãããããã«ãªãã¾ãã </para> <example id='example.fsockopen'> <title>fsockopen() ã«ããããPHP ã®å¯å¤å¼æ°å¦çã®å®è£ </title> <programlisting> <![CDATA[ pval **args[5]; int *sock=emalloc(sizeof(int)); int *sockp; int arg_count=ARG_COUNT(ht); int socketd = -1; unsigned char udp = 0; struct timeval timeout = { 60, 0 }; unsigned short portno; unsigned long conv; char *key = NULL; FLS_FETCH(); if (arg_count > 5 || arg_count < 2 || zend_get_parameters_array_ex(arg_count,args)==FAILURE) { CLOSE_SOCK(1); WRONG_PARAM_COUNT; } switch(arg_count) { case 5: convert_to_double_ex(args[4]); conv = (unsigned long) (Z_DVAL_PP(args[4]) * 1000000.0); timeout.tv_sec = conv / 1000000; timeout.tv_usec = conv % 1000000; /* fall-through */ case 4: if (!PZVAL_IS_REF(*args[3])) { php_error(E_WARNING,"error string argument to fsockopen not passed by reference"); } pval_copy_constructor(*args[3]); ZVAL_EMPTY_STRING(*args[3]); /* fall-through */ case 3: if (!PZVAL_IS_REF(*args[2])) { php_error(E_WARNING,"error argument to fsockopen not passed by reference"); return; } ZVAL_LONG(*args[2], 0); break; } convert_to_string_ex(args[0]); convert_to_long_ex(args[1]); portno = (unsigned short) Z_LVAL_P(args[1]); key = emalloc(Z_STRLEN_P(args[0]) + 10); ]]> </programlisting> </example> <para> <function>fsockopen</function> ãåãä»ãã弿°ã®æ°ã¯ã 2ã3ã4ãããã㯠5 ã§ãããæ±ºã¾ãã®å¤æ°å®£è¨ã®å¾ã«ã ãã®é¢æ°ã¯å¼æ°ã®æ°ãç¯å²å ã«ãããã©ããã調ã¹ã¾ãã ããããã<literal>switch()</literal> æã®ä¸ã«æµãã¦ããæ§è³ªãå©ç¨ãã¦ã ãã¹ã¦ã®å¼æ°ãå¦çãã¾ãã<literal>switch()</literal> æã¯ã ã¾ã弿°ã®æ°ãæå¤§ (5 å) ã§ãã£ãå ´åã®å¦çããå§ã¾ãã¾ãã ãã®å¾ã弿°ã®æ°ã 4 åã§ãã£ãå ´åã®å¦çã3 åã§ãã£ãå ´åã®å¦çã ã¨é ã«ãã©ã£ã¦ããã¾ããããã¯ããã¼ã¯ã¼ã <literal>break</literal> ã®è¨è¿°ãçç¥ãã¦ããããã§ããæå¾ã®å¦çãå®è¡ããå¾ã§ <literal>switch()</literal> æã¯çµäºãã 颿°ã®å¼æ°ã 2 åã ãã§ãã£ãå ´åã§ããå¿ è¦æå°éã®å¦çãå®è¡ããã¾ãã </para> <para> ãã®ããã«è¤æ°ã¹ãã¼ã¸ã®å¦çãæ®µéçã«å®è¡ããããã«ããã¨ã å¯å¤å¼æ°ã®å¦çãããããããªãã¾ãã </para> </sect2> <sect2 id="zend.arguments.access"> <title>弿°ã¸ã®ã¢ã¯ã»ã¹</title> <para> 弿°ã«ã¢ã¯ã»ã¹ããã«ã¯ããã¹ã¦ã®å¼æ°ã®åããã¡ãã¨å®ç¾©ããã¦ããªããã°ãªãã¾ããã ä½åº¦ãè¨ãã¾ãããPHP ã¯ç©¶æ¥µã®åçè¨èªãªã®ã§ãæã«åé¡ãèµ·ãããã¨ãããã¾ãã PHP ã¯ä¸åã®åãã§ãã¯ãè¡ããªãã®ã§ã ã©ããªåã®ãã¼ã¿ã§ã颿°ã«æ¸¡ããã¨ãã§ãã¦ãã¾ãã¾ãã æ¬å½ã¯æ´æ°å¤ãæå¾ ãã¦ããã®ã«é åãæ¸¡ããããããããªããã ãã®éã ã£ã¦ãããã¾ããPHP ã¯ããããªå ´åã§ãä¸åãªã«ãéç¥ãã¾ããã </para> <para> ãããé²ãã«ã¯ããããã® API ã使ç¨ãã¦å¼æ°ã®æ¹ãå¼·å¶çã«å¤æããªããã°ãªãã¾ãã (<xref linkend='tab.arg-conv'/> ãåç §ãã ãã)ã </para> <para> <emphasis>注æ:</emphasis> ãã¹ã¦ã®å¤æé¢æ°ã®ãã©ã¡ã¼ã¿ã¯ <envar>**zval</envar> ã§ãã </para> <table id='tab.arg-conv'> <title>弿°ã®å¤æé¢æ°</title> <tgroup cols="2"> <colspec colnum="1" colname="col1" colwidth="1.02*"/> <colspec colnum="2" colname="col2" colwidth="1.00*"/> <tbody> <row> <entry colname="col1">颿°</entry> <entry colname="col2">説æ</entry> </row> <row> <entry colname="col1"><function>convert_to_boolean_ex</function></entry> <entry colname="col2"> Boolean åã¸ã®å¼·å¶çãªå¤æãè¡ãã¾ãã Boolean å¤ã渡ãããå ´åã¯ä½ããã¾ããã Longãdouble ããã³ <literal>0</literal> ãå«ãæååã ãã㦠NULL å¤ã¯ Boolean <literal>0</literal> (FALSE) ã¨ãªãã¾ããé åããªãã¸ã§ã¯ãã¯ã ãã®å ã«ãªã£ã¦ããã¨ã³ããªãããããã£ã®æ°ãåºæºã«ãã¦å¤æããã¾ãã 空ã®é åã空ã®ãªãã¸ã§ã¯ã㯠FALSEããã以å¤ã¯ TRUE ã¨ãªãã¾ãã ãã®ä»ã®å¤ã¯ããã¹ã¦ Boolean <literal>1</literal> (TRUE) ã«ãªãã¾ãã </entry> </row> <row> <entry colname="col1"><function>convert_to_long_ex</function></entry> <entry colname="col2"> long å (ããã©ã«ãã®æ´æ°å) ã¸ã®å¼·å¶çãªå¤æãè¡ãã¾ãã NULL å¤ãBooleanããªã½ã¼ã¹ããã³ long ã¯ãã®ã¾ã¾ä½ããã¾ããã double ã¯åãè©°ãããã¾ããæ´æ°å¤ãå«ãæååã¯å¯¾å¿ããæ°å¤è¡¨ç¾ã«å¤æããã ãã以å¤ã®æåå㯠<literal>0</literal> ã«ãªãã¾ãã é åããªãã¸ã§ã¯ãã¯ãä¸èº«ã空ã®å ´åã« <literal>0</literal>ã ãã以å¤ã®å ´åã« <literal>1</literal> ã¨ãªãã¾ãã </entry> </row> <row> <entry colname="col1"><function>convert_to_double_ex</function></entry> <entry colname="col2"> double å (ããã©ã«ãã®æµ®åå°æ°ç¹æ°å¤å) ã¸ã®å¼·å¶çãªå¤æãè¡ãã¾ãã NULL å¤ãBooleanããªã½ã¼ã¹ãlongãããã¦ãã¡ãã double ã¯ãã®ã¾ã¾ä½ããã¾ãããæ°å¤ãå«ãæååã¯å¯¾å¿ããæ°å¤è¡¨ç¾ã«å¤æããã ãã以å¤ã®æåå㯠<literal>0.0</literal> ã«ãªãã¾ãã é åããªãã¸ã§ã¯ãã¯ãä¸èº«ã空ã®å ´åã« <literal>0.0</literal>ã ãã以å¤ã®å ´åã« <literal>1.0</literal> ã¨ãªãã¾ãã </entry> </row> <row> <entry colname="col1"><function>convert_to_string_ex</function></entry> <entry colname="col2"> æååã¸ã®å¼·å¶çãªå¤æãè¡ãã¾ããæååãæ¸¡ãããå ´åã¯ä½ããã¾ããã NULL å¤ã¯ç©ºã®æååã«å¤æããã¾ããBoolean TRUE 㯠<literal>"1"</literal>ããã以å¤ã® Boolean ã¯ç©ºã®æååã¨ãªãã¾ãã long ããã³ double ã¯ãããã対å¿ããæåå表ç¾ã«å¤æããã¾ãã é å㯠<literal>"Array"</literal>ããªãã¸ã§ã¯ã㯠<literal>"Object"</literal> ã¨ããæååã«å¤æããã¾ãã </entry> </row> <row> <entry colname="col1"><literal>convert_to_array_ex(value)</literal></entry> <entry colname="col2"> é åã¸ã®å¼·å¶çãªå¤æãè¡ãã¾ããé åãæ¸¡ãããå ´åã¯ä½ããã¾ããã ãªãã¸ã§ã¯ãã¯ããã¹ã¦ã®ããããã£ãé åã«å¤æããã¾ãã ããããã£åãé åã®ãã¼ãããããã£ã®å 容ãé åã®å¤ã¨ãªãã¾ãã NULL å¤ã¯ç©ºã®é åã«å¤æããã¾ãããã以å¤ã®ãã¹ã¦ã®å¤ã¯ã ãã¼ <literal>0</literal> ã«å¯¾å¿ããå¤ã¨ãã¦å ã®å¤ãæ ¼ç´ããé åã¨ãªãã¾ãã </entry> </row> <row> <entry colname="col1"><literal>convert_to_object_ex(value)</literal></entry> <entry colname="col2"> ãªãã¸ã§ã¯ãã¸ã®å¼·å¶çãªå¤æãè¡ãã¾ãããªãã¸ã§ã¯ããæ¸¡ãããå ´åã¯ä½ããã¾ããã NULL å¤ã¯ç©ºã®ãªãã¸ã§ã¯ãã«å¤æããã¾ããé åã¯ããã®ãã¼ãããããã£ã«ã ãã®å¤ãããããã£ã®å 容ã¨ãã¦ä¿æãããªãã¸ã§ã¯ãã«å¤æããã¾ãã ãã®ä»ã®åã¯ããã¹ã¦ãããã㣠<literal>scalar</literal> ããã¤ãªãã¸ã§ã¯ãã«å¤æããã¾ãããã®ããããã£ã®å 容ã¯ã 夿åã®å¤ã¨ãªãã¾ãã </entry> </row> <row> <entry colname="col1"><literal>convert_to_null_ex(value)</literal></entry> <entry colname="col2">NULL å¤ãã¤ã¾ã空ç½ã«ãªãããã«å¤æãã¾ãã</entry> </row> </tbody> </tgroup> </table> <note> <para> ãããã®æ¯ãèãã®ãã¢ããä»é² CD-ROM ã® <filename>cross_conversion.php</filename> ã§è¦ããã¾ãããã®åºåã <xref linkend='fig.cross-convert'/> ã«ç¤ºãã¾ãã </para> </note> <figure id='fig.cross-convert'> <title>PHP ã®åå¤æã®æå</title> <graphic fileref="figures/zend.04-cross-converter.png"/> </figure> <para> 弿°ã«å¯¾ãã¦ãããã®é¢æ°ã使ç¨ãããã¨ã§ã 渡ããããã¼ã¿ã®åã®å®å ¨æ§ã確ä¿ã§ãã¾ãã æ¸¡ãããåãè¦æ±ã¨ç°ãªã£ãå ´åãPHP ã¯ç©ºã®å¤ (ç©ºã®æååãé åããªãã¸ã§ã¯ãã æ°å¤ã® <literal>0</literal>ãBoolean ã® <literal>FALSE</literal> ãªã©) ãçµæã¨ãã¦è¿ãã¾ãã </para> <para> ããã¯ãå ã»ã©èª¬æãããµã³ãã«ã¢ã¸ã¥ã¼ã«ã®ã³ã¼ãã®ä¸é¨ãå¼ç¨ãããã®ã§ãã ããã§å®éã«å¤æé¢æ°ã使ç¨ãã¦ãã¾ãã <programlisting> <![CDATA[ zval **parameter; if((ZEND_NUM_ARGS() != 1) || (zend_get_parameters_ex(1, ¶meter) != SUCCESS)) { WRONG_PARAM_COUNT; } convert_to_long_ex(parameter); RETURN_LONG(Z_LVAL_P(parameter)); ]]> </programlisting> ãã©ã¡ã¼ã¿ã¸ã®ãã¤ã³ã¿ãåå¾ããå¾ã«ããã©ã¡ã¼ã¿ã®å¤ã long å (æ´æ°å¤) ã«å¤æããã¾ããããã¦ããããã®é¢æ°ã®è¿ãå¤ã¨ãªãã¾ãã ãã®å¤ã®ä¸èº«ã«ã¢ã¯ã»ã¹ããã«ã¯ã<envar>zval</envar> åã«ã¤ãã¦ã®ç¥èãå¿ è¦ã§ãããã®å®ç¾©ã <xref linkend='example.zval-typedef'/> ã«ç¤ºãã¾ãã </para> <example id='example.zval-typedef'> <title>PHP/Zend <envar>zval</envar> åå®ç¾©</title> <programlisting> <![CDATA[ typedef pval zval; typedef struct _zval_struct zval; typedef union _zvalue_value { long lval; /* long å¤ */ double dval; /* double å¤ */ struct { char *val; int len; } str; HashTable *ht; /* ããã·ã¥ãã¼ãã«å¤ */ struct { zend_class_entry *ce; HashTable *properties; } obj; } zvalue_value; struct _zval_struct { /* 夿°ã®æ å ± */ zvalue_value value; /* å¤ */ unsigned char type; /* ã¢ã¯ãã£ããªå */ unsigned char is_ref; short refcount; }; ]]> </programlisting> </example> <para> å®éã®ã¨ãã㯠<envar>pval</envar> (<filename>php.h</filename> ã§å®ç¾©) ã¯åãªã <envar>zval</envar> (<filename>zend.h</filename> ã§å®ç¾©) ã®ã¨ã¤ãªã¢ã¹ã§ããããã㯠<envar>_zval_struct</envar> ãããã¦ãã¾ãã ããã§ããã®æ§é ä½ã«æ³¨ç®ãã¦ã¿ã¾ãããã <envar>_zval_struct</envar> ã¯ããã¹ã¿ãæ§é ä½ã§ããã ãã®ä¸ã«ã¯å¤æ å ±ãåæ å ±ãåç §æ å ±ãå«ã¾ãã¦ãã¾ãã ä¸ã«å«ã¾ãã¦ãã <envar>zvalue_value</envar> ã¯å ±ç¨ä½ã§ããã 夿°ã®å¤ãããã«å«ã¾ãã¾ãã夿°ã®åã«å¿ãã¦ãå ±ç¨ä½ã®ä¸ã®é©åãªã¡ã³ãã¼ã«ã¢ã¯ã»ã¹ããå¿ è¦ãããã¾ãã ããããã®æ§é ä½ã«ã¤ãã¦ã¯ <xref linkend='tab.struct-zval'/>ã <xref linkend='tab.struct-zvalue-value'/> ããã³ <xref linkend='tab.ztype-constants'/> ãåç §ãã ããã </para> <table id='tab.struct-zval'> <title>Zend <envar>zval</envar> æ§é ä½</title> <tgroup cols="2"> <colspec colnum="1" colname="col1" colwidth="1.00*"/> <colspec colnum="2" colname="col2" colwidth="1.66*"/> <tbody> <row> <entry colname="col1">é ç®</entry> <entry colname="col2">説æ</entry> </row> <row> <entry colname="col1"><envar>value</envar></entry> <entry colname="col2"> ãã®å¤æ°ã®å 容ãå«ãå ±ç¨ä½ã詳細㯠<xref linkend='tab.struct-zvalue-value'/> ãåç §ãã ããã </entry> </row> <row> <entry colname="col1"><envar>type</envar></entry> <entry colname="col2"> 夿°ã®åãå«ã¿ã¾ãã使ç¨å¯è½ãªåã«ã¤ãã¦ã¯ <xref linkend='tab.ztype-constants'/> ãåç §ãã ããã </entry> </row> <row> <entry colname="col1"><envar>is_ref</envar></entry> <entry colname="col2"> ãã®å¤æ°ãåç §ã§ã¯ãªãå ´åã« 0ã ä»ã®å¤æ°ã¸ã®åç §ã§ããå ´åã« 1 ã¨ãªãã¾ãã </entry> </row> <row> <entry colname="col1"><envar>refcount</envar></entry> <entry colname="col2"> ãã®å¤æ°ã«å¯¾ããåç §ã®æ°ããã®å¤æ°ã«æ ¼ç´ããã¦ããå¤ã¸ã®æ°ããåç §ã使ããããã³ã«ã ã«ã¦ã³ã¿ã 1 å¢å ãã¾ããåç §ãè§£é¤ããããã³ã«ãã«ã¦ã³ã¿ã 1 æ¸å°ãã¾ãã åç §ã«ã¦ã³ã¿ã 0 ã«ãªã£ã段éã§ããã®å¤ã¯ã©ããããåç §ããã¦ããªããã¨ã«ãªãã¾ãã ãã®æç¹ã§ãèªåçã«ã¡ã¢ãªãè§£æ¾ããã¾ãã </entry> </row> </tbody> </tgroup> </table> <table id='tab.struct-zvalue-value'> <title>Zend <envar>zvalue_value</envar> æ§é ä½</title> <tgroup cols="2"> <colspec colnum="1" colname="col1" colwidth="1.00*"/> <colspec colnum="2" colname="col2" colwidth="1.66*"/> <tbody> <row> <entry colname="col1">é ç®</entry> <entry colname="col2">説æ</entry> </row> <row> <entry colname="col1"><envar>lval</envar></entry> <entry colname="col2"> 夿°ã®åã <literal>IS_LONG</literal>ã <literal>IS_BOOLEAN</literal> ããã㯠<literal>IS_RESOURCE</literal> ã§ããå ´åã«ãã®ããããã£ã使ç¨ãã¾ãã </entry> </row> <row> <entry colname="col1"><envar>dval</envar></entry> <entry colname="col2"> 夿°ã®åã <literal>IS_DOUBLE</literal> ã§ããå ´åã«ãã®ããããã£ã使ç¨ãã¾ãã </entry> </row> <row> <entry colname="col1"><envar>str</envar></entry> <entry colname="col2"> åã <literal>IS_STRING</literal> ã®å¤æ°ã«ã¢ã¯ã»ã¹ããéã«ããã®æ§é ä½ã使ç¨ãã¾ãã <envar>len</envar> ã«ã¯æååã®é·ããå«ã¾ãã <envar>val</envar> ãæååã¸ã®ãã¤ã³ã¿ã¨ãªãã¾ããZend 㯠C ã®æååã使ç¨ãã¦ããã®ã§ã æååã®é·ãã«ã¯ãæå¾ã® <literal>0x00</literal> ã®ã¶ããå«ã¾ãã¾ãã </entry> </row> <row> <entry colname="col1"><envar>ht</envar></entry> <entry colname="col2"> 夿°ãé åã§ããå ´åã«ããã®é ç®ã¯é åã®ããã·ã¥ãã¼ãã«ã¨ã³ããªã¸ã®ãã¤ã³ã¿ã¨ãªãã¾ãã </entry> </row> <row> <entry colname="col1"><envar>obj</envar></entry> <entry colname="col2"> 夿°ã®åã <literal>IS_OBJECT</literal> ã§ããå ´åã«ãã®ããããã£ã使ç¨ãã¾ãã </entry> </row> </tbody> </tgroup> </table> <table id='tab.ztype-constants'> <title>Zend 夿°ã®åã表ã宿°</title> <tgroup cols="2"> <colspec colnum="1" colname="col1" colwidth="1.00*"/> <colspec colnum="2" colname="col2" colwidth="1.65*"/> <tbody> <row> <entry colname="col1">宿°</entry> <entry colname="col2">説æ</entry> </row> <row> <entry colname="col1"><literal>IS_NULL</literal></entry> <entry colname="col2">NULL (空ç½) å¤ã表ãã¾ãã</entry> </row> <row> <entry colname="col1"><literal>IS_LONG</literal></entry> <entry colname="col2">long (æ´æ°) å¤ã</entry> </row> <row> <entry colname="col1"><literal>IS_DOUBLE</literal></entry> <entry colname="col2">double (æµ®åå°æ°ç¹) å¤ã</entry> </row> <row> <entry colname="col1"><literal>IS_STRING</literal></entry> <entry colname="col2">æååã</entry> </row> <row> <entry colname="col1"><literal>IS_ARRAY</literal></entry> <entry colname="col2">é åã表ãã¾ãã</entry> </row> <row> <entry colname="col1"><literal>IS_OBJECT</literal></entry> <entry colname="col2">ãªãã¸ã§ã¯ãã</entry> </row> <row> <entry colname="col1"><literal>IS_BOOL</literal></entry> <entry colname="col2">Boolean å¤ã</entry> </row> <row> <entry colname="col1"><literal>IS_RESOURCE</literal></entry> <entry colname="col2"> ãªã½ã¼ã¹ (ãªã½ã¼ã¹ã«ã¤ãã¦ã¯ã 以ä¸ã®é©åãªã»ã¯ã·ã§ã³ãåç §ãã ãã)ã </entry> </row> <row> <entry colname="col1"><literal>IS_CONSTANT</literal></entry> <entry colname="col2">宿° (å®ç¾©æ¸ã¿) å¤ã</entry> </row> </tbody> </tgroup> </table> <para> long å¤ã«ã¢ã¯ã»ã¹ããã«ã¯ <envar>zval.value.lval</envar>ã double å¤ã«ã¢ã¯ã»ã¹ããã«ã¯ <envar>zval.value.dval</envar>ãã¨ãã£ãããã«ä½¿ç¨ãã¾ãã ãã¹ã¦ã®å¤ã¯å ±ç¨ä½ã«ä¿åãããã®ã§ãä¸é©åãªã¡ã³ãã¼ã«ã¢ã¯ã»ã¹ããã¨ã ç¡æå³ãªçµæãå¾ããã¨ã«ãªãã¾ãã </para> <para> é åããªãã¸ã§ã¯ãã¸ã®ã¢ã¯ã»ã¹ã¯å°ãè¤éãªã®ã§ãå¾ã§èª¬æãã¾ãã </para> </sect2> <sect2 id="zend.arguments.by-reference"> <title>åç §æ¸¡ãããã弿°ã®æ±ã</title> <para> åç §æ¸¡ãã®å¼æ°ãåãåã£ã¦é¢æ°å é¨ã§ããã夿´ãããã¨ããå ´åã¯ã å°ã 注æãå¿ è¦ã§ãã </para> <para> æ¢ãã¦èª¬æãã¾ããã§ããããããã§ç¤ºãã¦ããç¶æ³ã§ã¯ã 颿°ã®ãã©ã¡ã¼ã¿ã¨ãã¦åãåã£ã <envar>zval</envar> ã«å¯¾ããæ¸ãè¾¼ã¿æ¨©éã¯ããã¾ããã ãã¡ãã颿°å ã§ç¬èªã«ä½æãã <envar>zval</envar> ã夿´ãããã¨ã¯å¯è½ã§ããã Zend ã®å é¨ãã¼ã¿ãåç §ãã¦ãã <envar>zval</envar> ã¯ã 決ãã¦å¤æ´ãã¦ã¯ããã¾ããã </para> <para> ããã¾ã§èª¬æãã¦ããã®ã¯ããããã <function>*_ex</function> 系㮠API ã°ããã§ãããæ°ã¥ãããããã¾ããããããã¾ã§ä½¿ç¨ãã¦ãã API 颿°ã¯ <function>zend_get_parameters</function> ã§ã¯ãªã㦠<function>zend_get_parameters_ex</function> ã§ããããã¾ã <function>convert_to_long</function> ã§ã¯ãªã㦠<function>convert_to_long_ex</function> ã§ããããããã® <function>*_ex</function> ç³»ã®é¢æ°ã¯ããããããæ¡å¼µãZend API ã¨å¼ã°ãããã®ã§ãã ãããã¯ã以åã® API ã«æ¯ã¹ã¦é度ãå°ãåä¸ãã¦ããã®ã§ããã ããã¨å¼ãæãã«èªã¿è¾¼ã¿å°ç¨ã®ã¢ã¯ã»ã¹ããã§ããªãããã«ãªã£ã¦ãã¾ãã </para> <para> Zend ã¯å é¨çã«ã¯åç §ã使ç¨ãã¦ããã®ã§ã ãã¾ãã¾ãªå¤æ°ãåãå¤ãåç §ãããã¨ããããã¾ãã <envar>zval</envar> ã³ã³ããã¸ã®æ¸ãè¾¼ã¿ã¢ã¯ã»ã¹ãããããã«ã¯ã ãã®ã³ã³ãããä¿æããå¤ãä»ã¨å®å ¨ã«åé¢ãã¦ãããã¨ã ã¤ã¾ãä»ã®ã³ã³ããããåç §ããã¦ããªããã¨ãå¿ è¦ã§ãã <envar>zval</envar> ã³ã³ãããä»ã®ã³ã³ããããåç §ããã¦ããå ´åã« ãã® <envar>zval</envar> ã夿´ããã¨ããã® <envar>zval</envar> ãåç §ãã¦ãããã®ä»ã®ã³ã³ããã®å 容ãå¤ãã£ã¦ãã¾ãã¾ã (ãããã夿´å¾ã®å¤ãæãããã«ãªãããã§ã)ã </para> <para> <function>zend_get_parameters_ex</function> ã¯ãåã« <envar>zval</envar> ã³ã³ããã¸ã®ãã¤ã³ã¿ãè¿ãã¾ããããã«åç §ãå«ã¾ãã¦ãããã©ããã¯èæ ®ãã¾ããã 䏿¹ãããã«å¯¾å¿ããä¼çµ±ç㪠API ã§ãã <function>zend_get_parameters</function> ã¯ãåç §ããã§ãã¯ãã¾ãã åç §ãè¦ã¤ãã£ãå ´åã«ã¯ãç¬ç«ãã <envar>zval</envar> ã³ã³ãããæ°ãã使ããåç §å ã®ãã¼ã¿ãããã«ã³ãã¼ãã ãã®æ°ãã使ãã (ä»ã¨ã¯åé¢ãã¦ãã) ã³ã³ããã¸ã®ãã¤ã³ã¿ãè¿ãã¾ãã </para> <para> ãã®æä½ã®ãã¨ã <emphasis>zval separation (zval ã®åé¢)</emphasis> (ããã㯠pval separation) ã¨è¨ãã¾ãã<function>*_ex</function> API 㯠zval ã®åé¢ãè¡ããªãã¾ããããã®ããã«å¤§å¹ ã«é«éåããã¾ãããã ãã®ä»£åã¨ãã¦æ¸ãè¾¼ã¿ã¢ã¯ã»ã¹ãã§ããªããªã£ã¦ãã¾ãã </para> <para> ã¨ã¯è¨ããã®ã®ããã©ã¡ã¼ã¿ã夿´ããã«ã¯æ¸ãè¾¼ã¿ã¢ã¯ã»ã¹ãããªããã°ãªãã¾ããã ãã®ãããªå ´åã®ããã«ãZend ã«ã¯ç¹å¥ãªæ¹æ³ãç¨æããã¦ãã¾ãã 颿°ã®ãã©ã¡ã¼ã¿ãåç §æ¸¡ããããå ´åã¯ãèªåçã« zval ã®åé¢ãè¡ãããã®ã§ãã ã¤ã¾ããPHP ã§ä¸ã®ããã«é¢æ°ãã³ã¼ã«ããã¨ã<envar>$parameter</envar> ãç¬ç«ããå¤ã¨ãã¦æ¸¡ããããã¨ã Zend ãèªåçã«ä¿è¨¼ãã¦ãããã®ã§ãã ããã«ãããæ¸ãè¾¼ã¿ãå¯è½ã¨ãªãã¾ãã <programlisting> my_function(&$parameter); </programlisting> </para> <para> ããããããã¯å¤æ¸¡ãã®ãã©ã¡ã¼ã¿ã«ã¯é©ç¨<emphasis>ããã¾ãã</emphasis>! åç §æ¸¡ã以å¤ã§æ¸¡ããããã©ã¡ã¼ã¿ä»¥å¤ã¯ãèªã¿è¾¼ã¿å°ç¨ã¨ãªãã¾ãã </para> <para> ãããã®æ§è³ªã«ããããã©ã¡ã¼ã¿ãæ±ãéã«ã¯ãããåç §ãªã®ãããã§ãªãã®ãããã£ããè¦æ¥µããå¿ è¦ãããã¾ãã ãããªãã¨ãæã£ã¦ãããªãçµæãå¼ãèµ·ãããã¨ã«ãªãã¾ãã ãã©ã¡ã¼ã¿ãåç §æ¸¡ãããããã©ããã調ã¹ãããã«ã¯ããã¯ã <literal>PZVAL_IS_REF</literal> ã使ç¨ãã¾ãããã®ãã¯ã㯠<literal>zval*</literal> ãåãåãããããåç §ãããã§ãªãããè¿ãã¾ãã <xref linkend='example.pass-by-ref'/> ã«å®éã®ä½¿ç¨ä¾ãããã¾ãã </para> <example id='example.pass-by-ref'> <title>ãã©ã¡ã¼ã¿ãåç §ã§æ¸¡ããããã©ããã調ã¹ã</title> <programlisting> <![CDATA[ zval *parameter; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", ¶meter) == FAILURE) return; /* ãã©ã¡ã¼ã¿ãåç §ã§æ¸¡ããããã©ããã調ã¹ã¾ã */ if (!PZVAL_IS_REF(parameter)) { { zend_error(E_WARNING, "ãã©ã¡ã¼ã¿ã¯åç §æ¸¡ãããã¾ããã§ãã"); RETURN_NULL(); } /* ãã©ã¡ã¼ã¿ã夿´ãã¾ã */ ZVAL_LONG(parameter, 10); ]]> </programlisting> <graphic fileref="figures/zend.05-reference-test.png"/> </example> </sect2> <sect2 id="zend.arguments.write-safety"> <title>Assuring Write Safety for Other Parameters</title> <para> <function>zend_get_parameters_ex</function> ã§åå¾ãããã©ã¡ã¼ã¿ã®ãã¡ã åç §æ¸¡ãã§ã¯ãªããã®ã«ã¤ãã¦ãå¤ã夿´ããããªãå ´åãããããããã¾ããã ãããªã¨ãã«ã¯ããã¯ã <literal>SEPARATE_ZVAL</literal> ã使ç¨ãã¾ãã ããã¯ãæå®ããã³ã³ããã«ã¤ã㦠zval ã®åé¢ãè¡ãã¾ãã æ°ãã使ããã <envar>zval</envar> ã¯å é¨ã®ãã¼ã¿ã¨ã¯åé¢ããã¦ããã ãã¼ã«ã«ã¹ã³ã¼ãã§ãã使ç¨ã§ãã¾ãããã¤ã¾ãã ã¹ã¯ãªããå ¨ä½ã®ã³ã³ããã¹ãã«å½±é¿ãä¸ãããã¨ãªã ãã¼ã¿ã夿´ãããç ´å£ãããã§ããããã«ãªãã®ã§ãã <programlisting> <![CDATA[ zval **parameter; /* ãã©ã¡ã¼ã¿ãåå¾ãã¾ã */ zend_get_parameters_ex(1, ¶meter); /* ãã®æç¹ã§ã¯ã<parameter> ã¯ã¾ã */ /* Zend ã®å é¨ãã¼ã¿ãããã¡ã¨ç´ä»ãã¦ãã¾ã */ /* <parameter> ãæ¸ãè¾¼ã¿å¯è½ã«ãã¾ã */ SEPARATE_ZVAL(parameter); /* ãã®æç¹ã§ã<parameter> ã夿´ã§ããããã«ãªãã¾ãã*/ /* ã°ãã¼ãã«ã«å½±é¿ãä¸ãããã¨ã¯ããã¾ãã */ ]]> </programlisting> <literal>SEPARATE_ZVAL</literal> ã¯ã<function>emalloc</function> ã使ç¨ãã¦æ°ãã <envar>zval</envar> ã³ã³ããã確ä¿ãã¾ãã ã¤ã¾ãããã®ã¡ã¢ãªã®éæ¾ãå¿ãã¦ãã¾ã£ãã¨ãã¦ãã ã¹ã¯ãªããã®çµäºæã«èªåçã«ç ´æ£ãããã¨ãããã¨ã§ãã ããããã³ã³ãããéæ¾ããã«ãã®ãã¯ããã³ã¼ã«ãç¶ããã¨ã RAM ãæ£ããã£ã¦ãã¾ãã¾ãã </para> <para> <emphasis>注æ:</emphasis> æ¸ãè¾¼ã¿æ¨©éã®åé¡ã«ã¤ãã¦ã¯ã ãä¼çµ±çãªãAPI (<function>zend_get_parameters</function> ããã®ä») ã使ç¨ããã°ç°¡åã«åé¿ã§ãã¾ãããããããã® API ã¯éæ¨å¥¨ã®ãããªã®ã§ãä»å¾ãã®ç« ã§ã¯æ·±å ¥ããã¾ããã </para> </sect2> </sect1> <!-- Keep this comment at the end of the file Local variables: mode: sgml sgml-omittag:t sgml-shorttag:t sgml-minimize-attributes:nil sgml-always-quote-attributes:t sgml-indent-step:1 sgml-indent-data:t indent-tabs-mode:nil sgml-parent-document:nil sgml-default-dtd-file:"../../../manual.ced" sgml-exposed-tags:nil sgml-local-catalogs:nil sgml-local-ecat-files:nil End: vim600: syn=xml fen fdm=syntax fdl=2 si vim: et tw=78 syn=sgml vi: ts=1 sw=1 -->
http://cvs.php.net/viewvc.cgi/phpdoc-ja/internals/zendapi/arguments.xml?view=markup&rev=1.1 Index: phpdoc-ja/internals/zendapi/arguments.xml +++ phpdoc-ja/internals/zendapi/arguments.xml <?xml version="1.0" encoding="utf-8"?> <!-- $Revision: 1.1 $ --> <!-- EN-Revision: 1.3 Maintainer: takagi Status: ready --> <sect1 id="zend.arguments"> <title>弿°ã®æ±ã</title> <para> è¨èªãæ¡å¼µããéã®æãéè¦ãªåé¡ã®ã²ã¨ã¤ã¯ã 弿°ã¨ãã¦æ¸¡ããããã¼ã¿ã®æ±ãã§ããããã¦ãã®æ¡å¼µã¢ã¸ã¥ã¼ã«ã¯ã ä½ããã®å ¥åãã¼ã¿ãæ±ã (ãããã¯ãã©ã¡ã¼ã¿ãåãåã£ã¦ ç¹å®ã®åä½ãè¡ã) ããã«ä½ããã¦ãã¾ããããã¦ã PHP 㨠C è¨èªã®éã§ãã¼ã¿ãããåãããããã®å¯ä¸ã®æ¹æ³ã 颿°ã®å¼æ°ã¨ãªãã¾ãã äºåã«å®ç¾©ããã°ãã¼ãã«å¤ã使ç¨ãã¦ãã¼ã¿ã交æãããã¨ããã¡ããå¯è½ã§ãã (ãã®æ¹æ³ã«ã¤ãã¦ãå¾è¿°ãã¾ã)ãããããªæå³ã§ãã®æ¹æ³ã¯é¿ããã¹ãã§ãã ããã¯ã¾ã£ãããå§ãã§ããªãææ®µã§ãã </para> <para> PHP ã§ã¯ãæ£å¼ã«é¢æ°ãå®£è¨ (declare) ãããã¨ã¯ããã¾ããã ãã®ããã颿°ã³ã¼ã«ã®æ§æã¯å®å ¨ã«åçãªãã®ã¨ãªãã ã¨ã©ã¼ãã§ãã¯ã¯è¡ããã¾ããã ã³ã¼ã«æ¹æ³ãæ£ãããã©ããã調ã¹ãã®ã¯ãã¦ã¼ã¶ãæ¸ãã³ã¼ãã®å½¹å²ã¨ãªãã¾ãã ä¾ãã°ããã颿°ã«å¯¾ãã¦å¼æ°ãã²ã¨ã¤ã ãæå®ãã¦ã³ã¼ã«ããå¾ã åã颿°ã«å¯¾ã㦠4 ã¤ã®å¼æ°ãæå®ãã¦ã³ã¼ã«ãããã¨ãå¯è½ã§ãã ã©ã¡ãã®ã³ã¼ã«ã«ã¤ãã¦ããææ³çã«ã¯ã¾ã£ããæ£ãããã®ã¨ãªãã¾ãã </para> <sect2 id="zend.arguments.count"> <title>弿°ã®æ°ã®å®ç¾©</title> <para> PHP ãæ£å¼ãªé¢æ°å®£è¨ãè¡ããªãããã«ã³ã¼ã«æã®ææ³ãã§ãã¯ãè¡ãããªãã ã¾ã PHP ãå¯å¤å¼æ°ããµãã¼ããã¦ãããªã©ã®çç±ã§ã å®éã«ãã®é¢æ°ã«ããã¤ã®å¼æ°ã渡ãããã®ããç¥ããªããã°ãªããªããã¨ãããã§ãããã ãã®ãããªå ´åã«ã¯ <literal>ZEND_NUM_ARGS</literal> ãã¯ãã使ç¨ãã¾ãã 以åã®ãã¼ã¸ã§ã³ã® PHP ã§ã¯ãã³ã¼ã«æã®å¼æ°ã®æ°ãåå¾ããããã« ãã®ãã¯ãã¯é¢æ°ã®ããã·ã¥ãã¼ãã«ã®ã¨ã³ã㪠<envar>ht</envar> ã使ç¨ãã¦ãã¾ããããã®ã¨ã³ããªã¯ <literal>INTERNAL_FUNCTION_PARAMETERS</literal> ã®ãªã¹ãããæ¸¡ããã¾ããã 颿°ã«æ¸¡ããã弿°ã®æ°ã¯ä»ã§ã¯ <envar>ht</envar> èªä½ã«å«ã¾ãã¦ããã®ã§ã<literal>ZEND_NUM_ARGS</literal> ã¯ããã¼ã®ãã¯ãã¨ãªã£ã¦ãã¾ã (å®éã®å®ç¾©ã¯ <filename>zend_API.h</filename> ãåç §ãã ãã)ã ããããä»å¾ã®ãã¨ãèããã¨ã å¼ã³åºãã¤ã³ã¿ã¼ãã§ã¤ã¹ãå¤ãã£ã¦ãäºææ§ãä¿ã¡ç¶ããããããã« ãã®ãã¯ãã使ç¨ãã¦ãããã¨ããå§ããã¾ãã <emphasis>注æ:</emphasis> æã® PHP ã§ã¯ããã®ãã¯ãã¨åçã®åããããã®ã¯ <literal>ARG_COUNT</literal> ãã¯ãã§ããã </para> <para> 弿°ã®æ°ãæ£ãããã©ããã調ã¹ãã³ã¼ãã¯æ¬¡ã®ããã«ãªãã¾ãã <programlisting> if(ZEND_NUM_ARGS() != 2) WRONG_PARAM_COUNT; </programlisting> 颿°ã³ã¼ã«æã®å¼æ°ã®æ°ã 2 ã¤ã§ãªãã£ãå ´åã ããã¯ã¨ã©ã¼ã¡ãã»ã¼ã¸ã表示ãã¦çµäºãã¾ãã ä¸ã®ã³ã¼ãã¯ã<literal>WRONG_PARAM_COUNT</literal> ãã¯ãã®ä½¿ç¨ä¾ã§ãããã¾ãã ããã¯ã以ä¸ã®ãããªæ¨æºçãªã¨ã©ã¼ã¡ãã»ã¼ã¸ãçæããããã«ä½¿ç¨ãããã®ã§ãã <![CDATA[ "Warning: Wrong parameter count for firstmodule() in /home/www/htdocs/firstmod.php on line 5" ]]> </para> <para> ãã®ãã¯ãã¯ããã©ã«ãã®ã¨ã©ã¼ã¡ãã»ã¼ã¸ã表示ããå¼ã³åºãå ã«å¶å¾¡ãæ»ãã¾ãã ãã®ãã¯ãã®å®ç¾©ãã¾ã <filename>zend_API.h</filename> ã«ããã¾ãããã®ãããªå 容ã§ãã <programlisting> ZEND_API void wrong_param_count(void); #define WRONG_PARAM_COUNT { wrong_param_count(); return; } </programlisting> ã覧ã®éãããã®ãã¯ã㯠<function>wrong_param_count</function> ã¨ããååã®å é¨é¢æ°ãã³ã¼ã«ãã¦ãã¾ãã ãã®é¢æ°ãè¦åã表示ãã¦ãã¾ããç¬èªã®ã¨ã©ã¼ã¡ãã»ã¼ã¸ã使ããããã®æ¹æ³ã«ã¤ãã¦ã¯ã å¾åã®ç¯ãæ å ±ã®è¡¨ç¤ºããåç §ãã ããã </para> </sect2> <sect2 id="zend.arguments.retrieval"> <title>弿°ã®åå¾</title> <note> <title> ãã©ã¡ã¼ã¿ã®ãã¼ã¹ç¨ã®æ°ãã API </title> <para> ãã®ç« ã§ã¯ãAndrei Zmievski ã«ããæ°ãã Zend ãã©ã¡ã¼ã¿ãã¼ã¹ç¨ API ã説æãã¾ãããã® API 㯠PHP 4.0.6 ãã PHP 4.1.0 ã®éã®éçºä¸ã«å°å ¥ããã¾ããã </para> </note> <para> ãã©ã¡ã¼ã¿ã®ãã¼ã¹ã¯ãã¾ãã«ããããµããæä½ã§ãããå°ãéå±ã«æãããã¨ãããã§ãããã ã¾ããã¨ã©ã¼ãã§ãã¯ãã¨ã©ã¼ã¡ãã»ã¼ã¸ã¯æ¨æºåããã¦ããã»ããããã§ãããã PHP 4.1.0 以éã§ã¯ããã©ã¡ã¼ã¿ã®ãã¼ã¹ç¨ã®æ°ãã API ã使ç¨ãããã¨ã§ãããå®ç¾ã§ãã¾ãã ãã® API ã¯ãã©ã¡ã¼ã¿ã®åãåããåçã«åç´åãã¦ãã¾ããã å¯å¤å¼æ°ãåãåã颿°ã«ã¯ä½¿ç¨ã§ããªãã¨ããå¼±ç¹ãããã¾ãã ãããã大åã®é¢æ°ã§ã¯ã弿°ã®æ°ã¯åºå®ã§ãããã®ããã æ°ããæ¨æºã¨ãã¦ããã®ãã¼ã¹ç¨ API ã®ä½¿ç¨ãæ¨å¥¨ãã¾ãã </para> <para> ãã©ã¡ã¼ã¿ã®ãã¼ã¹ç¨é¢æ°ã®ãããã¿ã¤ãã¯ããã®ããã«ãªãã¾ãã <programlisting> int zend_parse_parameters(int num_args TSRMLS_DC, char *type_spec, ...); </programlisting> æåã®å¼æ°ã«ãããªãã®é¢æ°ãåãåããã©ã¡ã¼ã¿ã®æ°ãæå®ãã¾ãã ããã§ã¯ <literal>ZEND_NUM_ARGS()</literal> ã使ç¨ã§ãã¾ãã 2 çªç®ã®ãã©ã¡ã¼ã¿ã¯ã常㫠<literal>TSRMLS_CC</literal> ãã¯ãã§ãªããã°ãªãã¾ããã3 çªç®ã®å¼æ°ã¯ã ããªãã®é¢æ°ãåãåã弿°ã®æ°ããã³åã表ãæååã§ãã ããã¯ãprintf ã®æ¸å¼æå®æååã«ãã£ã¦åºåå 容ãæå®ããã®ã«ä¼¼ã¦ãã¾ãã ããã¦æå¾ã«ããã©ã¡ã¼ã¿ã®å¤ãåãåã夿°ã¸ã®ãã¤ã³ã¿ãæå®ãã¾ãã </para> <para> 常ã«å¸æéãã®åã§ãã¼ã¿ãåãåããã¨ãã§ããããã <function>zend_parse_parameters</function> ã¯å¯è½ãªç¯å²ã§å夿ãè¡ãã¾ãã ããããã¹ã«ã©ã¼åã¯å¥ã®ã¹ã«ã©ã¼æ¹ã«å¤æãããã¨ãå¯è½ã§ãã ããããè¤éãªå (é åããªãã¸ã§ã¯ããããã¯ãªã½ã¼ã¹) ã¨ã¹ã«ã©ã¼åã®éã®å夿ã¯ã§ãã¾ããã </para> <para> ãã©ã¡ã¼ã¿ã®åå¾ã«æåãããã¤å夿ã§ã¨ã©ã¼ãçºçããªãã£ãå ´å㯠ãã®é¢æ°ã¯ <literal>SUCCESS</literal> ãè¿ãã¾ãããã以å¤ã®å ´å㯠<literal>FAILURE</literal> ãè¿ãã¾ããã¾ãã ããã©ã¡ã¼ã¿ã®æ°ãä¸è´ããªãããå夿ãã§ããªãã£ãã ãªã©ã®æ å ±ãå«ãã¨ã©ã¼ã¡ãã»ã¼ã¸ãåºåãã¾ãã </para> <para> åºåãããã¨ã©ã¼ã¡ãã»ã¼ã¸ã¯ãä¾ãã°æ¬¡ã®ãããªãã®ã«ãªãã¾ãã <screen> Warning - ini_get_all() requires at most 1 parameter, 2 given Warning - wddx_deserialize() expects parameter 1 to be string, array given </screen> ãã¡ããããããã®ã¡ãã»ã¼ã¸ã«ã¯ã¨ã©ã¼ã®çºçãããã¡ã¤ã«åãè¡çªå·ãå«ã¾ãã¦ãã¾ãã </para> <para> åãæå®ããæåã®ä¸è¦§ãããã«ã¾ã¨ãã¾ãã <itemizedlist> <listitem> <para><literal>l - </literal>long</para> </listitem> <listitem> <para><literal>d - </literal>double</para> </listitem> <listitem> <para><literal>s - </literal>string (null ãã¤ãã®å¯è½æ§ããã) ããã³ãã®é·ã</para> </listitem> <listitem> <para><literal>b - </literal>boolean</para> </listitem> <listitem> <para><literal>r - </literal><literal>zval*</literal> ã«ä¿åããããªã½ã¼ã¹</para> </listitem> <listitem> <para><literal>a - </literal><literal>zval*</literal> ã«ä¿åãããé å</para> </listitem> <listitem> <para><literal>o - </literal><literal>zval*</literal> ã«ä¿åããã (ããããã¯ã©ã¹ã®) ãªãã¸ã§ã¯ã</para> </listitem> <listitem> <para><literal>O - </literal><literal>zval*</literal> ã«ä¿åããã (ã¯ã©ã¹ã¨ã³ããªã§æå®ããã¦ããã¯ã©ã¹ã®) ãªãã¸ã§ã¯ã</para> </listitem> <listitem> <para><literal>z - </literal><literal>zval*</literal> èªä½</para> </listitem> </itemizedlist> 以ä¸ã®æåã¯ãåæå®æååã®ä¸ã§ç¹å¥ãªæå³ãæã¡ã¾ãã <itemizedlist> <listitem> <para> <literal>| - </literal>æ®ãã®ãã©ã¡ã¼ã¿ããªãã·ã§ã³ã§ãããã¨ã表ãã¾ãã ãããã®ãã©ã¡ã¼ã¿ã«å¯¾å¿ããä¿åç¨å¤æ°ã¯ã æ¡å¼µã¢ã¸ã¥ã¼ã«èªèº«ã«ãã£ã¦ããã©ã«ãå¤ã§åæåãããªããã°ãªãã¾ããã ãªããªãããã©ã¡ã¼ã¿ã渡ããã¦ããªããã°ãã¼ã¹é¢æ°ãééããªãããã§ãã </para> </listitem> <listitem> <para> <literal>/ - </literal>ãã©ã¡ã¼ã¿ã®å¾ã«ãã®æåãç¶ããã¨ã ãã®ãã©ã¡ã¼ã¿ã«å¯¾ã㦠<function>SEPARATE_ZVAL_IF_NOT_REF</function> ãã³ã¼ã«ãã¾ããããã«ããããã®ãã©ã¡ã¼ã¿ãåç §ã§ãªããã°ãã©ã¡ã¼ã¿ã®ã³ãã¼ã使ããã¾ãã </para> </listitem> <listitem> <para> <literal>! - </literal>ãã©ã¡ã¼ã¿ã®å¾ã«ãã®æåãç¶ããã¨ã ãã®ãã©ã¡ã¼ã¿ã¯æå®ããåããã㯠<literal>NULL</literal> ã¨ãªãã¾ã (aãoãOãr ããã³ z ã«ã¤ãã¦ã®ã¿é©ç¨å¯è½)ã <literal>NULL</literal> å¤ã渡ãããå ´åã¯ã ä¿åãã¤ã³ã¿ã®å¤ã <literal>NULL</literal> ã«è¨å®ããã¾ãã </para> </listitem> </itemizedlist> </para> <para> ãã®é¢æ°ã®ä½¿ç¨æ³ã«ã¤ãã¦èª¬æããã«ã¯ã å®éã®ä¾ãè¦ã¦ããã ãã®ããã¡ã°ãã§ãããã <programlisting> <![CDATA[ /* longãæååã¨ãã®é·ãããã㦠zval ãåãåãã¾ãã*/ long l; char *s; int s_len; zval *param; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lsz", &l, &s, &s_len, ¶m) == FAILURE) { return; } /* my_ce ã§æå®ããã¯ã©ã¹ã®ãªãã¸ã§ã¯ããããã¦ãªãã·ã§ã³ã§ double å¤ãåãåãã¾ãã*/ zval *obj; double d = 0.5; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "O|d", &obj, my_ce, &d) == FAILURE) { return; } /* ãªãã¸ã§ã¯ã (ããã㯠null)ãããã¦é åãåãåãã¾ãã ãªãã¸ã§ã¯ãã« null ãæ¸¡ãããå ´åãobj 㯠NULL ã¨ãªãã¾ãã*/ zval *obj; zval *arr; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "O!a", &obj, &arr) == FAILURE) { return; } /* é åã®ã³ãã¼ãåãåãã¾ãã*/ zval *arr; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a/", &arr) == FAILURE) { return; } /* æåã® 3 ã¤ã®ãã©ã¡ã¼ã¿ã®ã¿ãåãåãã¾ã (å¯å¤å¼æ°ã®é¢æ°ã®å ´åã«æç¨ã§ã)ã*/ zval *z; zend_bool b; zval *r; if (zend_parse_parameters(3, "zbr!", &z, &b, &r) == FAILURE) { return; } ]]> </programlisting> </para> <para> æå¾ã®ä¾ã§ã<function>ZEND_NUM_ARGS</function> ã使ç¨ããã«ãã©ã¡ã¼ã¿æ°ã 3 ã¨ãã¦ãããã¨ã«æ³¨ç®ãã¾ãããã ãããããã¨ã§ãå¯å¤å¼æ°ã®é¢æ°ã«å¯¾ãã¦æä½éå¿ è¦ãªå¼æ°ã®æ°ãæå®ãããã¨ãã§ãã¾ãã ãã¡ãããããæ®ãã®ãã©ã¡ã¼ã¿ã«ã¤ãã¦ãå¦çãããã®ãªã <function>zend_get_parameters_array_ex</function> ã使ç¨ãã¦ãããåå¾ããªããã°ãªãã¾ããã </para> <para> æ¡å¼µçã®ãã¼ã¹é¢æ°ãåå¨ãã¾ãã ããã¯ã追å ã®ãã©ã°ã弿°ã«æå®ãããã¨ã§ãã®åããå¶å¾¡ãã¾ãã <programlisting> int zend_parse_parameters_ex(int flags, int num_args TSRMLS_DC, char *type_spec, ...); </programlisting> </para> <para> ç¾å¨ã¯ã渡ããã¨ã®ã§ãããã©ã°ã¯ <literal>ZEND_PARSE_PARAMS_QUIET</literal> ã ãã§ãããããæå®ããã¨ãå¦çä¸ã«çºçããã¨ã©ã¼ã¡ãã»ã¼ã¸ãåºåããªãããã«ãªãã¾ãã ããã¯ããã®é¢æ°ããã¾ãã¾ãªå½¢å¼ã®å¼æ°ãåãåããã¨ãæ³å®ãã¦ããã ç¬èªã®ã¨ã©ã¼ã¡ãã»ã¼ã¸ã§å¯¾å¿ãããå ´åãªã©ã«æç¨ã§ãã </para> <para> ä¾ãã°ã3 ã¤ã® long å¤ããã㯠3 ã¤ã®æååãåãåã颿°ã¯ã ãã®ããã«ãªãã¾ãã <programlisting> <![CDATA[ long l1, l2, l3; char *s; if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, "lll", &l1, &l2, &l3) == SUCCESS) { /* long ã®å ´å */ } else if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS(), "s", &s, &s_len) == SUCCESS) { /* æååã®å ´å */ } else { php_error(E_WARNING, "%s() takes either three long values or a string as argument", get_active_function_name(TSRMLS_C)); return; }]]> </programlisting> </para> <para> ä¸ã§èª¬æãããããã®å ´åã«ã¤ãã¦ãããã©ã¡ã¼ã¿ã®åå¾å¦çã¯æ éã«è¡ãã¾ãããã ãã以å¤ã®ä¾ã«ã¤ãã¦ã¯ãPHP ã«å梱ããã¦ããæ¡å¼µã¢ã¸ã¥ã¼ã«ã®ã½ã¼ã¹ã åèã«ãã¦ãã ããã便å©ãªä½¿ç¨æ³ãããããçºè¦ã§ããã§ãããã </para> </sect2> <sect2 id="zend.arguments.deprecated-retrieval"> <title>弿°ã®åå¾ã®å¤ãæ¹æ³ (廿¢äºå®)</title> <note> <title> 廿¢äºå®ã®ãã©ã¡ã¼ã¿ãã¼ã¹ç¨ API </title> <para> ãã® API ã¯éæ¨å¥¨ã§ããç¾å¨ã¯æ°ãã ZEND ãã©ã¡ã¼ã¿ãã¼ã¹ API ã使ç¨ããã¦ãã¾ãã </para> </note> <para> 弿°ã®æ°ããã§ãã¯ãçµããããæ¬¡ã¯å¼æ°ãã®ãã®ã«ã¢ã¯ã»ã¹ããªããã°ãªãã¾ããã ãã®ããã«ã¯ <function>zend_get_parameters_ex</function> ã®å©ããåãããã¨ã«ãªãã¾ãã <programlisting> <![CDATA[ zval **parameter; if(zend_get_parameters_ex(1, ¶meter) != SUCCESS) WRONG_PARAM_COUNT; ]]> </programlisting> ãã¹ã¦ã®å¼æ°ã¯ <envar>zval</envar> ã³ã³ããã«æ ¼ç´ããã <emphasis>äºéã«</emphasis>ãã¤ã³ããããå¿ è¦ãããã¾ãã ä¸ã®ã³ã¼ãã¯ã弿°ãåå¾ãã¦ããããã¤ã³ã¿ <envar>parameter</envar> ã§ã¢ã¯ã»ã¹ã§ããããã«ãã¦ãã¾ãã </para> <para> <function>zend_get_parameters_ex</function> ã¯ãå°ãªãã¨ã 2 ã¤ã®å¼æ°ãåãä»ãã¾ãã æåã®å¼æ°ã¯ãåå¾ãã弿°ã®æ°ã§ã (ããã¯ã 颿°ãã³ã¼ã«ãããéã®å¼æ°ã®æ°ã¨åãã§ãªããã°ãªãã¾ããã ãã®ãããå¼ã³åºãæ§æããã¡ãã¨ãã§ãã¯ãããã¨ã大åã«ãªãã¾ã)ã 2 çªç® (ããã³ãã以é) ã®å¼æ°ã¯ã<envar>zval</envar> ã¸ã®ãã¤ã³ã¿ã¸ã®ãã¤ã³ã¿ã¸ã®ãã¤ã³ã¿ (ãªãã¦ããããããã¨ã§ããã!) ã§ãã ãããå¿ è¦ã«ãªãã®ã¯ãç§ãã¡ã使ãã颿°å ã®ãã¼ã«ã« <envar>**zval</envar> ã管çããããã« Zend ã¯å é¨ã§ <envar>**zval</envar> ã使ç¨ãã¦ããã <function>zend_get_parameters_ex</function> ã¯ããã«å¯¾ãããã¤ã³ã¿ãå¿ è¦ã¨ããããã§ãã </para> <para> <function>zend_get_parameters_ex</function> ã®è¿ãå¤ã¯ <literal>SUCCESS</literal> ããã㯠<literal>FAILURE</literal> ã§ããããã (å½ç¶ã®ãã¨ã) æåãããã¨ããããã¯å¼æ°ã®å¦çã«å¤±æãããã¨ã示ãã¾ãã ãã£ã¨ããããã¡ãªå¤±æã®åå ã¯ããã©ã¡ã¼ã¿ã®æ°ãééãããã¨ã§ãã ãã®å ´åã¯ã <literal>WRONG_PARAM_COUNT</literal> ã§é¢æ°ãæããªããã°ãªãã¾ããã </para> <para> è¤æ°ã®å¼æ°ãåãåãã«ã¯ããã®ããã«ãã¾ãã <programlisting> <![CDATA[ zval **param1, **param2, **param3, **param4; if(zend_get_parameters_ex(4, ¶m1, ¶m2, ¶m3, ¶m4) != SUCCESS) WRONG_PARAM_COUNT; ]]> </programlisting> </para> <para> <function>zend_get_parameters_ex</function> ãã¨ã©ã¼ã¨ãªãã®ã¯ã å®éã®æ°ããå¤ãã®ãã©ã¡ã¼ã¿ãåå¾ãããã¨ããå ´åã®ã¿ã§ãã ããå®éã®é¢æ°ã 5 ã¤ã®å¼æ°ã§ã³ã¼ã«ãããã®ã« <function>zend_get_parameters_ex</function> ã§ã¯ 3 ã¤ããåå¾ããªãã£ãå ´åã ä½ãã¨ã©ã¼ã¯çºçãããæåã® 3 ã¤ã®ãã©ã¡ã¼ã¿ãåå¾ããã¾ãã ç¶ã㦠<function>zend_get_parameters_ex</function> ãã³ã¼ã«ããã¨ãã¦ãã æ®ãã®å¼æ°ãåå¾ã§ããããã§ã¯ãªãæåã¨åããã®ãå¾ãããã ãã§ãã </para> </sect2> <sect2 id="zend.arguments.variable"> <title>å¯å¤å¼æ° / ãªãã·ã§ã³ãã©ã¡ã¼ã¿ã®æ±ã</title> <para> ããããªãã®é¢æ°ãå¯å¤å¼æ°ãåãä»ããã®ãªãã ããã»ã©ã®ä¾ã次åã®çã¨ãªããã¨ãããã§ãããããã ã åãããå¯è½æ§ã®ãããã¹ã¦ã®å¼æ°ã®æ°ã«å¯¾ãã¦ããããã <function>zend_get_parameters_ex</function> ã³ã¼ã«ããªããã°ãªããã 䏿ºãæ®ãã¾ãã </para> <para> ãã®ãããªå ´åã«ã¯ã <function>zend_get_parameters_array_ex</function> 颿°ã使ããã¨ãã§ãã¾ãã ããã¯ã弿°ã®æ°ãæå®ãã¦ãã¼ã¿ãåå¾ãããããé åã«æ ¼ç´ãã¾ãã <programlisting> <![CDATA[ zval **parameter_array[4]; /* 弿°ã®æ°ãåå¾ãã¾ã */ argument_count = ZEND_NUM_ARGS(); /* 弿°ã®æ°ã®ç¯å² (æä½ 2 åãæå¤§ 4 å) */ /* ãæºããã¦ãããã©ããã調ã¹ã¾ã */ if(argument_count < 2 || argument_count > 4) WRONG_PARAM_COUNT; /* 弿°ã®æ°ãæ£ããã£ãã®ã§ããã®å 容ãåå¾ãã¾ã */ if(zend_get_parameters_array_ex(argument_count, parameter_array) != SUCCESS) WRONG_PARAM_COUNT; ]]> </programlisting> ã¾ãã弿°ã®æ°ã調ã¹ã¦ãããäºæããç¯å²å ã«ãããã¨ã確ããã¾ãã ãããã <function>zend_get_parameters_array_ex</function> ã使ç¨ãã 弿°ã®å¤ã¸ã®ãã¤ã³ã¿ã <envar>parameter_array</envar> ã«æ ¼ç´ãã¾ãã </para> <para> ãããé常ã«ãã¾ãå®è£ ããã®ããPHP ã® <function>fsockopen</function> ãå¦çããã³ã¼ãã§ãããã®ã³ã¼ã㯠<filename>ext/standard/fsock.c</filename> ã«ããã <xref linkend='example.fsockopen'/> ã§è¦ããã¨ãã§ãã¾ãã ãã®ã½ã¼ã¹ã®ä¸ã«ç¥ããªã颿°ãå«ã¾ãã¦ããã¨ãã¦ããç¾æç¹ã§ã¯åé¡ããã¾ããã ããã«ãããããã«ãªãã¾ãã </para> <example id='example.fsockopen'> <title>fsockopen() ã«ããããPHP ã®å¯å¤å¼æ°å¦çã®å®è£ </title> <programlisting> <![CDATA[ pval **args[5]; int *sock=emalloc(sizeof(int)); int *sockp; int arg_count=ARG_COUNT(ht); int socketd = -1; unsigned char udp = 0; struct timeval timeout = { 60, 0 }; unsigned short portno; unsigned long conv; char *key = NULL; FLS_FETCH(); if (arg_count > 5 || arg_count < 2 || zend_get_parameters_array_ex(arg_count,args)==FAILURE) { CLOSE_SOCK(1); WRONG_PARAM_COUNT; } switch(arg_count) { case 5: convert_to_double_ex(args[4]); conv = (unsigned long) (Z_DVAL_PP(args[4]) * 1000000.0); timeout.tv_sec = conv / 1000000; timeout.tv_usec = conv % 1000000; /* fall-through */ case 4: if (!PZVAL_IS_REF(*args[3])) { php_error(E_WARNING,"error string argument to fsockopen not passed by reference"); } pval_copy_constructor(*args[3]); ZVAL_EMPTY_STRING(*args[3]); /* fall-through */ case 3: if (!PZVAL_IS_REF(*args[2])) { php_error(E_WARNING,"error argument to fsockopen not passed by reference"); return; } ZVAL_LONG(*args[2], 0); break; } convert_to_string_ex(args[0]); convert_to_long_ex(args[1]); portno = (unsigned short) Z_LVAL_P(args[1]); key = emalloc(Z_STRLEN_P(args[0]) + 10); ]]> </programlisting> </example> <para> <function>fsockopen</function> ãåãä»ãã弿°ã®æ°ã¯ã 2ã3ã4ãããã㯠5 ã§ãããæ±ºã¾ãã®å¤æ°å®£è¨ã®å¾ã«ã ãã®é¢æ°ã¯å¼æ°ã®æ°ãç¯å²å ã«ãããã©ããã調ã¹ã¾ãã ããããã<literal>switch()</literal> æã®ä¸ã«æµãã¦ããæ§è³ªãå©ç¨ãã¦ã ãã¹ã¦ã®å¼æ°ãå¦çãã¾ãã<literal>switch()</literal> æã¯ã ã¾ã弿°ã®æ°ãæå¤§ (5 å) ã§ãã£ãå ´åã®å¦çããå§ã¾ãã¾ãã ãã®å¾ã弿°ã®æ°ã 4 åã§ãã£ãå ´åã®å¦çã3 åã§ãã£ãå ´åã®å¦çã ã¨é ã«ãã©ã£ã¦ããã¾ããããã¯ããã¼ã¯ã¼ã <literal>break</literal> ã®è¨è¿°ãçç¥ãã¦ããããã§ããæå¾ã®å¦çãå®è¡ããå¾ã§ <literal>switch()</literal> æã¯çµäºãã 颿°ã®å¼æ°ã 2 åã ãã§ãã£ãå ´åã§ããå¿ è¦æå°éã®å¦çãå®è¡ããã¾ãã </para> <para> ãã®ããã«è¤æ°ã¹ãã¼ã¸ã®å¦çãæ®µéçã«å®è¡ããããã«ããã¨ã å¯å¤å¼æ°ã®å¦çãããããããªãã¾ãã </para> </sect2> <sect2 id="zend.arguments.access"> <title>弿°ã¸ã®ã¢ã¯ã»ã¹</title> <para> 弿°ã«ã¢ã¯ã»ã¹ããã«ã¯ããã¹ã¦ã®å¼æ°ã®åããã¡ãã¨å®ç¾©ããã¦ããªããã°ãªãã¾ããã ä½åº¦ãè¨ãã¾ãããPHP ã¯ç©¶æ¥µã®åçè¨èªãªã®ã§ãæã«åé¡ãèµ·ãããã¨ãããã¾ãã PHP ã¯ä¸åã®åãã§ãã¯ãè¡ããªãã®ã§ã ã©ããªåã®ãã¼ã¿ã§ã颿°ã«æ¸¡ããã¨ãã§ãã¦ãã¾ãã¾ãã æ¬å½ã¯æ´æ°å¤ãæå¾ ãã¦ããã®ã«é åãæ¸¡ããããããããªããã ãã®éã ã£ã¦ãããã¾ããPHP ã¯ããããªå ´åã§ãä¸åãªã«ãéç¥ãã¾ããã </para> <para> ãããé²ãã«ã¯ããããã® API ã使ç¨ãã¦å¼æ°ã®æ¹ãå¼·å¶çã«å¤æããªããã°ãªãã¾ãã (<xref linkend='tab.arg-conv'/> ãåç §ãã ãã)ã </para> <para> <emphasis>注æ:</emphasis> ãã¹ã¦ã®å¤æé¢æ°ã®ãã©ã¡ã¼ã¿ã¯ <envar>**zval</envar> ã§ãã </para> <table id='tab.arg-conv'> <title>弿°ã®å¤æé¢æ°</title> <tgroup cols="2"> <colspec colnum="1" colname="col1" colwidth="1.02*"/> <colspec colnum="2" colname="col2" colwidth="1.00*"/> <tbody> <row> <entry colname="col1">颿°</entry> <entry colname="col2">説æ</entry> </row> <row> <entry colname="col1"><function>convert_to_boolean_ex</function></entry> <entry colname="col2"> Boolean åã¸ã®å¼·å¶çãªå¤æãè¡ãã¾ãã Boolean å¤ã渡ãããå ´åã¯ä½ããã¾ããã Longãdouble ããã³ <literal>0</literal> ãå«ãæååã ãã㦠NULL å¤ã¯ Boolean <literal>0</literal> (FALSE) ã¨ãªãã¾ããé åããªãã¸ã§ã¯ãã¯ã ãã®å ã«ãªã£ã¦ããã¨ã³ããªãããããã£ã®æ°ãåºæºã«ãã¦å¤æããã¾ãã 空ã®é åã空ã®ãªãã¸ã§ã¯ã㯠FALSEããã以å¤ã¯ TRUE ã¨ãªãã¾ãã ãã®ä»ã®å¤ã¯ããã¹ã¦ Boolean <literal>1</literal> (TRUE) ã«ãªãã¾ãã </entry> </row> <row> <entry colname="col1"><function>convert_to_long_ex</function></entry> <entry colname="col2"> long å (ããã©ã«ãã®æ´æ°å) ã¸ã®å¼·å¶çãªå¤æãè¡ãã¾ãã NULL å¤ãBooleanããªã½ã¼ã¹ããã³ long ã¯ãã®ã¾ã¾ä½ããã¾ããã double ã¯åãè©°ãããã¾ããæ´æ°å¤ãå«ãæååã¯å¯¾å¿ããæ°å¤è¡¨ç¾ã«å¤æããã ãã以å¤ã®æåå㯠<literal>0</literal> ã«ãªãã¾ãã é åããªãã¸ã§ã¯ãã¯ãä¸èº«ã空ã®å ´åã« <literal>0</literal>ã ãã以å¤ã®å ´åã« <literal>1</literal> ã¨ãªãã¾ãã </entry> </row> <row> <entry colname="col1"><function>convert_to_double_ex</function></entry> <entry colname="col2"> double å (ããã©ã«ãã®æµ®åå°æ°ç¹æ°å¤å) ã¸ã®å¼·å¶çãªå¤æãè¡ãã¾ãã NULL å¤ãBooleanããªã½ã¼ã¹ãlongãããã¦ãã¡ãã double ã¯ãã®ã¾ã¾ä½ããã¾ãããæ°å¤ãå«ãæååã¯å¯¾å¿ããæ°å¤è¡¨ç¾ã«å¤æããã ãã以å¤ã®æåå㯠<literal>0.0</literal> ã«ãªãã¾ãã é åããªãã¸ã§ã¯ãã¯ãä¸èº«ã空ã®å ´åã« <literal>0.0</literal>ã ãã以å¤ã®å ´åã« <literal>1.0</literal> ã¨ãªãã¾ãã </entry> </row> <row> <entry colname="col1"><function>convert_to_string_ex</function></entry> <entry colname="col2"> æååã¸ã®å¼·å¶çãªå¤æãè¡ãã¾ããæååãæ¸¡ãããå ´åã¯ä½ããã¾ããã NULL å¤ã¯ç©ºã®æååã«å¤æããã¾ããBoolean TRUE 㯠<literal>"1"</literal>ããã以å¤ã® Boolean ã¯ç©ºã®æååã¨ãªãã¾ãã long ããã³ double ã¯ãããã対å¿ããæåå表ç¾ã«å¤æããã¾ãã é å㯠<literal>"Array"</literal>ããªãã¸ã§ã¯ã㯠<literal>"Object"</literal> ã¨ããæååã«å¤æããã¾ãã </entry> </row> <row> <entry colname="col1"><literal>convert_to_array_ex(value)</literal></entry> <entry colname="col2"> é åã¸ã®å¼·å¶çãªå¤æãè¡ãã¾ããé åãæ¸¡ãããå ´åã¯ä½ããã¾ããã ãªãã¸ã§ã¯ãã¯ããã¹ã¦ã®ããããã£ãé åã«å¤æããã¾ãã ããããã£åãé åã®ãã¼ãããããã£ã®å 容ãé åã®å¤ã¨ãªãã¾ãã NULL å¤ã¯ç©ºã®é åã«å¤æããã¾ãããã以å¤ã®ãã¹ã¦ã®å¤ã¯ã ãã¼ <literal>0</literal> ã«å¯¾å¿ããå¤ã¨ãã¦å ã®å¤ãæ ¼ç´ããé åã¨ãªãã¾ãã </entry> </row> <row> <entry colname="col1"><literal>convert_to_object_ex(value)</literal></entry> <entry colname="col2"> ãªãã¸ã§ã¯ãã¸ã®å¼·å¶çãªå¤æãè¡ãã¾ãããªãã¸ã§ã¯ããæ¸¡ãããå ´åã¯ä½ããã¾ããã NULL å¤ã¯ç©ºã®ãªãã¸ã§ã¯ãã«å¤æããã¾ããé åã¯ããã®ãã¼ãããããã£ã«ã ãã®å¤ãããããã£ã®å 容ã¨ãã¦ä¿æãããªãã¸ã§ã¯ãã«å¤æããã¾ãã ãã®ä»ã®åã¯ããã¹ã¦ãããã㣠<literal>scalar</literal> ããã¤ãªãã¸ã§ã¯ãã«å¤æããã¾ãããã®ããããã£ã®å 容ã¯ã 夿åã®å¤ã¨ãªãã¾ãã </entry> </row> <row> <entry colname="col1"><literal>convert_to_null_ex(value)</literal></entry> <entry colname="col2">NULL å¤ãã¤ã¾ã空ç½ã«ãªãããã«å¤æãã¾ãã</entry> </row> </tbody> </tgroup> </table> <note> <para> ãããã®æ¯ãèãã®ãã¢ããä»é² CD-ROM ã® <filename>cross_conversion.php</filename> ã§è¦ããã¾ãããã®åºåã <xref linkend='fig.cross-convert'/> ã«ç¤ºãã¾ãã </para> </note> <figure id='fig.cross-convert'> <title>PHP ã®åå¤æã®æå</title> <graphic fileref="figures/zend.04-cross-converter.png"/> </figure> <para> 弿°ã«å¯¾ãã¦ãããã®é¢æ°ã使ç¨ãããã¨ã§ã 渡ããããã¼ã¿ã®åã®å®å ¨æ§ã確ä¿ã§ãã¾ãã æ¸¡ãããåãè¦æ±ã¨ç°ãªã£ãå ´åãPHP ã¯ç©ºã®å¤ (ç©ºã®æååãé åããªãã¸ã§ã¯ãã æ°å¤ã® <literal>0</literal>ãBoolean ã® <literal>FALSE</literal> ãªã©) ãçµæã¨ãã¦è¿ãã¾ãã </para> <para> ããã¯ãå ã»ã©èª¬æãããµã³ãã«ã¢ã¸ã¥ã¼ã«ã®ã³ã¼ãã®ä¸é¨ãå¼ç¨ãããã®ã§ãã ããã§å®éã«å¤æé¢æ°ã使ç¨ãã¦ãã¾ãã <programlisting> <![CDATA[ zval **parameter; if((ZEND_NUM_ARGS() != 1) || (zend_get_parameters_ex(1, ¶meter) != SUCCESS)) { WRONG_PARAM_COUNT; } convert_to_long_ex(parameter); RETURN_LONG(Z_LVAL_P(parameter)); ]]> </programlisting> ãã©ã¡ã¼ã¿ã¸ã®ãã¤ã³ã¿ãåå¾ããå¾ã«ããã©ã¡ã¼ã¿ã®å¤ã long å (æ´æ°å¤) ã«å¤æããã¾ããããã¦ããããã®é¢æ°ã®è¿ãå¤ã¨ãªãã¾ãã ãã®å¤ã®ä¸èº«ã«ã¢ã¯ã»ã¹ããã«ã¯ã<envar>zval</envar> åã«ã¤ãã¦ã®ç¥èãå¿ è¦ã§ãããã®å®ç¾©ã <xref linkend='example.zval-typedef'/> ã«ç¤ºãã¾ãã </para> <example id='example.zval-typedef'> <title>PHP/Zend <envar>zval</envar> åå®ç¾©</title> <programlisting> <![CDATA[ typedef pval zval; typedef struct _zval_struct zval; typedef union _zvalue_value { long lval; /* long å¤ */ double dval; /* double å¤ */ struct { char *val; int len; } str; HashTable *ht; /* ããã·ã¥ãã¼ãã«å¤ */ struct { zend_class_entry *ce; HashTable *properties; } obj; } zvalue_value; struct _zval_struct { /* 夿°ã®æ å ± */ zvalue_value value; /* å¤ */ unsigned char type; /* ã¢ã¯ãã£ããªå */ unsigned char is_ref; short refcount; }; ]]> </programlisting> </example> <para> å®éã®ã¨ãã㯠<envar>pval</envar> (<filename>php.h</filename> ã§å®ç¾©) ã¯åãªã <envar>zval</envar> (<filename>zend.h</filename> ã§å®ç¾©) ã®ã¨ã¤ãªã¢ã¹ã§ããããã㯠<envar>_zval_struct</envar> ãããã¦ãã¾ãã ããã§ããã®æ§é ä½ã«æ³¨ç®ãã¦ã¿ã¾ãããã <envar>_zval_struct</envar> ã¯ããã¹ã¿ãæ§é ä½ã§ããã ãã®ä¸ã«ã¯å¤æ å ±ãåæ å ±ãåç §æ å ±ãå«ã¾ãã¦ãã¾ãã ä¸ã«å«ã¾ãã¦ãã <envar>zvalue_value</envar> ã¯å ±ç¨ä½ã§ããã 夿°ã®å¤ãããã«å«ã¾ãã¾ãã夿°ã®åã«å¿ãã¦ãå ±ç¨ä½ã®ä¸ã®é©åãªã¡ã³ãã¼ã«ã¢ã¯ã»ã¹ããå¿ è¦ãããã¾ãã ããããã®æ§é ä½ã«ã¤ãã¦ã¯ <xref linkend='tab.struct-zval'/>ã <xref linkend='tab.struct-zvalue-value'/> ããã³ <xref linkend='tab.ztype-constants'/> ãåç §ãã ããã </para> <table id='tab.struct-zval'> <title>Zend <envar>zval</envar> æ§é ä½</title> <tgroup cols="2"> <colspec colnum="1" colname="col1" colwidth="1.00*"/> <colspec colnum="2" colname="col2" colwidth="1.66*"/> <tbody> <row> <entry colname="col1">é ç®</entry> <entry colname="col2">説æ</entry> </row> <row> <entry colname="col1"><envar>value</envar></entry> <entry colname="col2"> ãã®å¤æ°ã®å 容ãå«ãå ±ç¨ä½ã詳細㯠<xref linkend='tab.struct-zvalue-value'/> ãåç §ãã ããã </entry> </row> <row> <entry colname="col1"><envar>type</envar></entry> <entry colname="col2"> 夿°ã®åãå«ã¿ã¾ãã使ç¨å¯è½ãªåã«ã¤ãã¦ã¯ <xref linkend='tab.ztype-constants'/> ãåç §ãã ããã </entry> </row> <row> <entry colname="col1"><envar>is_ref</envar></entry> <entry colname="col2"> ãã®å¤æ°ãåç §ã§ã¯ãªãå ´åã« 0ã ä»ã®å¤æ°ã¸ã®åç §ã§ããå ´åã« 1 ã¨ãªãã¾ãã </entry> </row> <row> <entry colname="col1"><envar>refcount</envar></entry> <entry colname="col2"> ãã®å¤æ°ã«å¯¾ããåç §ã®æ°ããã®å¤æ°ã«æ ¼ç´ããã¦ããå¤ã¸ã®æ°ããåç §ã使ããããã³ã«ã ã«ã¦ã³ã¿ã 1 å¢å ãã¾ããåç §ãè§£é¤ããããã³ã«ãã«ã¦ã³ã¿ã 1 æ¸å°ãã¾ãã åç §ã«ã¦ã³ã¿ã 0 ã«ãªã£ã段éã§ããã®å¤ã¯ã©ããããåç §ããã¦ããªããã¨ã«ãªãã¾ãã ãã®æç¹ã§ãèªåçã«ã¡ã¢ãªãè§£æ¾ããã¾ãã </entry> </row> </tbody> </tgroup> </table> <table id='tab.struct-zvalue-value'> <title>Zend <envar>zvalue_value</envar> æ§é ä½</title> <tgroup cols="2"> <colspec colnum="1" colname="col1" colwidth="1.00*"/> <colspec colnum="2" colname="col2" colwidth="1.66*"/> <tbody> <row> <entry colname="col1">é ç®</entry> <entry colname="col2">説æ</entry> </row> <row> <entry colname="col1"><envar>lval</envar></entry> <entry colname="col2"> 夿°ã®åã <literal>IS_LONG</literal>ã <literal>IS_BOOLEAN</literal> ããã㯠<literal>IS_RESOURCE</literal> ã§ããå ´åã«ãã®ããããã£ã使ç¨ãã¾ãã </entry> </row> <row> <entry colname="col1"><envar>dval</envar></entry> <entry colname="col2"> 夿°ã®åã <literal>IS_DOUBLE</literal> ã§ããå ´åã«ãã®ããããã£ã使ç¨ãã¾ãã </entry> </row> <row> <entry colname="col1"><envar>str</envar></entry> <entry colname="col2"> åã <literal>IS_STRING</literal> ã®å¤æ°ã«ã¢ã¯ã»ã¹ããéã«ããã®æ§é ä½ã使ç¨ãã¾ãã <envar>len</envar> ã«ã¯æååã®é·ããå«ã¾ãã <envar>val</envar> ãæååã¸ã®ãã¤ã³ã¿ã¨ãªãã¾ããZend 㯠C ã®æååã使ç¨ãã¦ããã®ã§ã æååã®é·ãã«ã¯ãæå¾ã® <literal>0x00</literal> ã®ã¶ããå«ã¾ãã¾ãã </entry> </row> <row> <entry colname="col1"><envar>ht</envar></entry> <entry colname="col2"> 夿°ãé åã§ããå ´åã«ããã®é ç®ã¯é åã®ããã·ã¥ãã¼ãã«ã¨ã³ããªã¸ã®ãã¤ã³ã¿ã¨ãªãã¾ãã </entry> </row> <row> <entry colname="col1"><envar>obj</envar></entry> <entry colname="col2"> 夿°ã®åã <literal>IS_OBJECT</literal> ã§ããå ´åã«ãã®ããããã£ã使ç¨ãã¾ãã </entry> </row> </tbody> </tgroup> </table> <table id='tab.ztype-constants'> <title>Zend 夿°ã®åã表ã宿°</title> <tgroup cols="2"> <colspec colnum="1" colname="col1" colwidth="1.00*"/> <colspec colnum="2" colname="col2" colwidth="1.65*"/> <tbody> <row> <entry colname="col1">宿°</entry> <entry colname="col2">説æ</entry> </row> <row> <entry colname="col1"><literal>IS_NULL</literal></entry> <entry colname="col2">NULL (空ç½) å¤ã表ãã¾ãã</entry> </row> <row> <entry colname="col1"><literal>IS_LONG</literal></entry> <entry colname="col2">long (æ´æ°) å¤ã</entry> </row> <row> <entry colname="col1"><literal>IS_DOUBLE</literal></entry> <entry colname="col2">double (æµ®åå°æ°ç¹) å¤ã</entry> </row> <row> <entry colname="col1"><literal>IS_STRING</literal></entry> <entry colname="col2">æååã</entry> </row> <row> <entry colname="col1"><literal>IS_ARRAY</literal></entry> <entry colname="col2">é åã表ãã¾ãã</entry> </row> <row> <entry colname="col1"><literal>IS_OBJECT</literal></entry> <entry colname="col2">ãªãã¸ã§ã¯ãã</entry> </row> <row> <entry colname="col1"><literal>IS_BOOL</literal></entry> <entry colname="col2">Boolean å¤ã</entry> </row> <row> <entry colname="col1"><literal>IS_RESOURCE</literal></entry> <entry colname="col2"> ãªã½ã¼ã¹ (ãªã½ã¼ã¹ã«ã¤ãã¦ã¯ã 以ä¸ã®é©åãªã»ã¯ã·ã§ã³ãåç §ãã ãã)ã </entry> </row> <row> <entry colname="col1"><literal>IS_CONSTANT</literal></entry> <entry colname="col2">宿° (å®ç¾©æ¸ã¿) å¤ã</entry> </row> </tbody> </tgroup> </table> <para> long å¤ã«ã¢ã¯ã»ã¹ããã«ã¯ <envar>zval.value.lval</envar>ã double å¤ã«ã¢ã¯ã»ã¹ããã«ã¯ <envar>zval.value.dval</envar>ãã¨ãã£ãããã«ä½¿ç¨ãã¾ãã ãã¹ã¦ã®å¤ã¯å ±ç¨ä½ã«ä¿åãããã®ã§ãä¸é©åãªã¡ã³ãã¼ã«ã¢ã¯ã»ã¹ããã¨ã ç¡æå³ãªçµæãå¾ããã¨ã«ãªãã¾ãã </para> <para> é åããªãã¸ã§ã¯ãã¸ã®ã¢ã¯ã»ã¹ã¯å°ãè¤éãªã®ã§ãå¾ã§èª¬æãã¾ãã </para> </sect2> <sect2 id="zend.arguments.by-reference"> <title>åç §æ¸¡ãããã弿°ã®æ±ã</title> <para> åç §æ¸¡ãã®å¼æ°ãåãåã£ã¦é¢æ°å é¨ã§ããã夿´ãããã¨ããå ´åã¯ã å°ã 注æãå¿ è¦ã§ãã </para> <para> æ¢ãã¦èª¬æãã¾ããã§ããããããã§ç¤ºãã¦ããç¶æ³ã§ã¯ã 颿°ã®ãã©ã¡ã¼ã¿ã¨ãã¦åãåã£ã <envar>zval</envar> ã«å¯¾ããæ¸ãè¾¼ã¿æ¨©éã¯ããã¾ããã ãã¡ãã颿°å ã§ç¬èªã«ä½æãã <envar>zval</envar> ã夿´ãããã¨ã¯å¯è½ã§ããã Zend ã®å é¨ãã¼ã¿ãåç §ãã¦ãã <envar>zval</envar> ã¯ã 決ãã¦å¤æ´ãã¦ã¯ããã¾ããã </para> <para> ããã¾ã§èª¬æãã¦ããã®ã¯ããããã <function>*_ex</function> 系㮠API ã°ããã§ãããæ°ã¥ãããããã¾ããããããã¾ã§ä½¿ç¨ãã¦ãã API 颿°ã¯ <function>zend_get_parameters</function> ã§ã¯ãªã㦠<function>zend_get_parameters_ex</function> ã§ããããã¾ã <function>convert_to_long</function> ã§ã¯ãªã㦠<function>convert_to_long_ex</function> ã§ããããããã® <function>*_ex</function> ç³»ã®é¢æ°ã¯ããããããæ¡å¼µãZend API ã¨å¼ã°ãããã®ã§ãã ãããã¯ã以åã® API ã«æ¯ã¹ã¦é度ãå°ãåä¸ãã¦ããã®ã§ããã ããã¨å¼ãæãã«èªã¿è¾¼ã¿å°ç¨ã®ã¢ã¯ã»ã¹ããã§ããªãããã«ãªã£ã¦ãã¾ãã </para> <para> Zend ã¯å é¨çã«ã¯åç §ã使ç¨ãã¦ããã®ã§ã ãã¾ãã¾ãªå¤æ°ãåãå¤ãåç §ãããã¨ããããã¾ãã <envar>zval</envar> ã³ã³ããã¸ã®æ¸ãè¾¼ã¿ã¢ã¯ã»ã¹ãããããã«ã¯ã ãã®ã³ã³ãããä¿æããå¤ãä»ã¨å®å ¨ã«åé¢ãã¦ãããã¨ã ã¤ã¾ãä»ã®ã³ã³ããããåç §ããã¦ããªããã¨ãå¿ è¦ã§ãã <envar>zval</envar> ã³ã³ãããä»ã®ã³ã³ããããåç §ããã¦ããå ´åã« ãã® <envar>zval</envar> ã夿´ããã¨ããã® <envar>zval</envar> ãåç §ãã¦ãããã®ä»ã®ã³ã³ããã®å 容ãå¤ãã£ã¦ãã¾ãã¾ã (ãããã夿´å¾ã®å¤ãæãããã«ãªãããã§ã)ã </para> <para> <function>zend_get_parameters_ex</function> ã¯ãåã« <envar>zval</envar> ã³ã³ããã¸ã®ãã¤ã³ã¿ãè¿ãã¾ããããã«åç §ãå«ã¾ãã¦ãããã©ããã¯èæ ®ãã¾ããã 䏿¹ãããã«å¯¾å¿ããä¼çµ±ç㪠API ã§ãã <function>zend_get_parameters</function> ã¯ãåç §ããã§ãã¯ãã¾ãã åç §ãè¦ã¤ãã£ãå ´åã«ã¯ãç¬ç«ãã <envar>zval</envar> ã³ã³ãããæ°ãã使ããåç §å ã®ãã¼ã¿ãããã«ã³ãã¼ãã ãã®æ°ãã使ãã (ä»ã¨ã¯åé¢ãã¦ãã) ã³ã³ããã¸ã®ãã¤ã³ã¿ãè¿ãã¾ãã </para> <para> ãã®æä½ã®ãã¨ã <emphasis>zval separation (zval ã®åé¢)</emphasis> (ããã㯠pval separation) ã¨è¨ãã¾ãã<function>*_ex</function> API 㯠zval ã®åé¢ãè¡ããªãã¾ããããã®ããã«å¤§å¹ ã«é«éåããã¾ãããã ãã®ä»£åã¨ãã¦æ¸ãè¾¼ã¿ã¢ã¯ã»ã¹ãã§ããªããªã£ã¦ãã¾ãã </para> <para> ã¨ã¯è¨ããã®ã®ããã©ã¡ã¼ã¿ã夿´ããã«ã¯æ¸ãè¾¼ã¿ã¢ã¯ã»ã¹ãããªããã°ãªãã¾ããã ãã®ãããªå ´åã®ããã«ãZend ã«ã¯ç¹å¥ãªæ¹æ³ãç¨æããã¦ãã¾ãã 颿°ã®ãã©ã¡ã¼ã¿ãåç §æ¸¡ããããå ´åã¯ãèªåçã« zval ã®åé¢ãè¡ãããã®ã§ãã ã¤ã¾ããPHP ã§ä¸ã®ããã«é¢æ°ãã³ã¼ã«ããã¨ã<envar>$parameter</envar> ãç¬ç«ããå¤ã¨ãã¦æ¸¡ããããã¨ã Zend ãèªåçã«ä¿è¨¼ãã¦ãããã®ã§ãã ããã«ãããæ¸ãè¾¼ã¿ãå¯è½ã¨ãªãã¾ãã <programlisting> my_function(&$parameter); </programlisting> </para> <para> ããããããã¯å¤æ¸¡ãã®ãã©ã¡ã¼ã¿ã«ã¯é©ç¨<emphasis>ããã¾ãã</emphasis>! åç §æ¸¡ã以å¤ã§æ¸¡ããããã©ã¡ã¼ã¿ä»¥å¤ã¯ãèªã¿è¾¼ã¿å°ç¨ã¨ãªãã¾ãã </para> <para> ãããã®æ§è³ªã«ããããã©ã¡ã¼ã¿ãæ±ãéã«ã¯ãããåç §ãªã®ãããã§ãªãã®ãããã£ããè¦æ¥µããå¿ è¦ãããã¾ãã ãããªãã¨ãæã£ã¦ãããªãçµæãå¼ãèµ·ãããã¨ã«ãªãã¾ãã ãã©ã¡ã¼ã¿ãåç §æ¸¡ãããããã©ããã調ã¹ãããã«ã¯ããã¯ã <literal>PZVAL_IS_REF</literal> ã使ç¨ãã¾ãããã®ãã¯ã㯠<literal>zval*</literal> ãåãåãããããåç §ãããã§ãªãããè¿ãã¾ãã <xref linkend='example.pass-by-ref'/> ã«å®éã®ä½¿ç¨ä¾ãããã¾ãã </para> <example id='example.pass-by-ref'> <title>ãã©ã¡ã¼ã¿ãåç §ã§æ¸¡ããããã©ããã調ã¹ã</title> <programlisting> <![CDATA[ zval *parameter; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", ¶meter) == FAILURE) return; /* ãã©ã¡ã¼ã¿ãåç §ã§æ¸¡ããããã©ããã調ã¹ã¾ã */ if (!PZVAL_IS_REF(parameter)) { { zend_error(E_WARNING, "ãã©ã¡ã¼ã¿ã¯åç §æ¸¡ãããã¾ããã§ãã"); RETURN_NULL(); } /* ãã©ã¡ã¼ã¿ã夿´ãã¾ã */ ZVAL_LONG(parameter, 10); ]]> </programlisting> <graphic fileref="figures/zend.05-reference-test.png"/> </example> </sect2> <sect2 id="zend.arguments.write-safety"> <title>Assuring Write Safety for Other Parameters</title> <para> <function>zend_get_parameters_ex</function> ã§åå¾ãããã©ã¡ã¼ã¿ã®ãã¡ã åç §æ¸¡ãã§ã¯ãªããã®ã«ã¤ãã¦ãå¤ã夿´ããããªãå ´åãããããããã¾ããã ãããªã¨ãã«ã¯ããã¯ã <literal>SEPARATE_ZVAL</literal> ã使ç¨ãã¾ãã ããã¯ãæå®ããã³ã³ããã«ã¤ã㦠zval ã®åé¢ãè¡ãã¾ãã æ°ãã使ããã <envar>zval</envar> ã¯å é¨ã®ãã¼ã¿ã¨ã¯åé¢ããã¦ããã ãã¼ã«ã«ã¹ã³ã¼ãã§ãã使ç¨ã§ãã¾ãããã¤ã¾ãã ã¹ã¯ãªããå ¨ä½ã®ã³ã³ããã¹ãã«å½±é¿ãä¸ãããã¨ãªã ãã¼ã¿ã夿´ãããç ´å£ãããã§ããããã«ãªãã®ã§ãã <programlisting> <![CDATA[ zval **parameter; /* ãã©ã¡ã¼ã¿ãåå¾ãã¾ã */ zend_get_parameters_ex(1, ¶meter); /* ãã®æç¹ã§ã¯ã<parameter> ã¯ã¾ã */ /* Zend ã®å é¨ãã¼ã¿ãããã¡ã¨ç´ä»ãã¦ãã¾ã */ /* <parameter> ãæ¸ãè¾¼ã¿å¯è½ã«ãã¾ã */ SEPARATE_ZVAL(parameter); /* ãã®æç¹ã§ã<parameter> ã夿´ã§ããããã«ãªãã¾ãã*/ /* ã°ãã¼ãã«ã«å½±é¿ãä¸ãããã¨ã¯ããã¾ãã */ ]]> </programlisting> <literal>SEPARATE_ZVAL</literal> ã¯ã<function>emalloc</function> ã使ç¨ãã¦æ°ãã <envar>zval</envar> ã³ã³ããã確ä¿ãã¾ãã ã¤ã¾ãããã®ã¡ã¢ãªã®éæ¾ãå¿ãã¦ãã¾ã£ãã¨ãã¦ãã ã¹ã¯ãªããã®çµäºæã«èªåçã«ç ´æ£ãããã¨ãããã¨ã§ãã ããããã³ã³ãããéæ¾ããã«ãã®ãã¯ããã³ã¼ã«ãç¶ããã¨ã RAM ãæ£ããã£ã¦ãã¾ãã¾ãã </para> <para> <emphasis>注æ:</emphasis> æ¸ãè¾¼ã¿æ¨©éã®åé¡ã«ã¤ãã¦ã¯ã ãä¼çµ±çãªãAPI (<function>zend_get_parameters</function> ããã®ä») ã使ç¨ããã°ç°¡åã«åé¿ã§ãã¾ãããããããã® API ã¯éæ¨å¥¨ã®ãããªã®ã§ãä»å¾ãã®ç« ã§ã¯æ·±å ¥ããã¾ããã </para> </sect2> </sect1> <!-- Keep this comment at the end of the file Local variables: mode: sgml sgml-omittag:t sgml-shorttag:t sgml-minimize-attributes:nil sgml-always-quote-attributes:t sgml-indent-step:1 sgml-indent-data:t indent-tabs-mode:nil sgml-parent-document:nil sgml-default-dtd-file:"../../../manual.ced" sgml-exposed-tags:nil sgml-local-catalogs:nil sgml-local-ecat-files:nil End: vim600: syn=xml fen fdm=syntax fdl=2 si vim: et tw=78 syn=sgml vi: ts=1 sw=1 -->