メモを取ることはコーディングと同じくらいカジュアルであることがわかりました。その後、さらにコードやブログを読みました。カジュアルすぎるため、高品質のコードを作成したり、わかりやすいメモを書いたりすることが困難であることがわかりました。
メモを取ることは知識を整理するプロセスであり、知識への精通度を表現できます。
今日は、PHP 拡張機能でパラメーターを受け取る方法を記録するコードを書きます。
拡張機能の作り方など基本的なことはここでは説明しません。 パラメータを受け取る関数の書き方は関数部分を修正するだけです。 。昨日書いた関数部分は以下の通りです。
/* 这里是功能 这个函数不接收参数,只有返回值。 */ PHP_FUNCTION(helloworld){ int len; char *strg; len = spprintf(&strg, 0, "%.78s", "helloworld"); RETURN_STRINGL(strg, len, 0);}
ここでは、受け取ったパラメータを計算して a+b の値を計算します。最初にパラメータを受け取るには、メソッド
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &a, &b) == FAILURE) { return; }
に次のコードを追加する必要があります。ここでパラメータを受け取るには、次のことを知っておく必要があります。ここで整数を受け取る場合は、「l」を記述する必要があります。 2 つ受け取った場合は、「ll」を 2 つ書き込み、受け取ったパラメータを 1 つ書き込んだ後、指定した変数アドレスに値を代入します。パラメータが 2 つなら 2 つ、3 つなら、値を書き込みます。一度に 3 つずつ書きます。文字列やその他のパラメータについては、同じ手順に戻ります。
b Booleanl Integer 整型d Floating point 浮点型s String 字符串r Resource 资源a Array 数组o Object instance 对象O Object instance of a specified type 特定类型的对象z Non-specific zval 任意类型~Z zval**类型f 表示函数、方法名称,PHP5.1里貌似木有... .
改造コードは以下の通りです
/* 这里是功能 这个函数不接收参数,只有返回值。 */ PHP_FUNCTION(helloworld){ int a; int b; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &a, &b) == FAILURE) { return; } int c; c=a+b; RETURN_LONG(c);}
以上で加算計算関数が完成します。次にコンパイルして起動します。次に、PHP コードで次のように呼び出します:
<?php echo helloworld(1,3);