この記事では主に PHP ソース コード 12 についての簡単な説明を紹介します。return_value については、戻り値に特定の参照値があります。必要な方は参照してください。
を読んでください。 PHP のソースコード 以前から、拡張関数で PHP_FUNCTION を使用し、その値を return_value に代入すれば、この関数の値を返すことができることは知っていました。
その後、自分でコードをトレースし、return_value のようなグローバル変数か、return_value を含むグローバル ハッシュテーブルがあると常に考えていました。
ブラザーに尋ねるまで、それは見つかりませんでした。今日、ニアオ兄弟がメールでこう言っていることに突然気づきました。「return_value は、PHP スクリプトに関数 PHP_FUCTION を提供する PHP のパラメータであり、マクロを通じて展開されます。このパラメータをコピーすると、ZE はフロントエンドの呼び出しに値を返します」 "
マクロ定義は次のとおりです:
#define PHP_FUNCTION ZEND_FUNCTION#define ZEND_FUNCTION(name) ZEND_NAMED_FUNCTION(ZEND_FN(name))#define ZEND_NAMED_FUNCTION(name) void name(INTERNAL_FUNCTION_PARAMETERS)#define INTERNAL_FUNCTION_PARAMETERS int ht, zval *return_value, zval **return_value_ptr, zval *this_ptr, int return_value_used TSRMLS_DC
一部の組み込み関数 ( each など) は ZEND_FUNCTION を直接使用します
拡張関数は PHP_FUNCTION を使用します
In一部の拡張関数では、 return_value を使用せず、代わりに return_value を含むマクロを使用することがあります。
一般的なマクロは次のとおりです。
// zend_API.h 500行开始 #define ZVAL_FALSE(z) ZVAL_BOOL(z, 0)#define ZVAL_TRUE(z) ZVAL_BOOL(z, 1) #define RETVAL_RESOURCE(l) ZVAL_RESOURCE(return_value, l) #define RETVAL_BOOL(b) ZVAL_BOOL(return_value, b) #define RETVAL_NULL() ZVAL_NULL(return_value) #define RETVAL_LONG(l) ZVAL_LONG(return_value, l) #define RETVAL_DOUBLE(d) ZVAL_DOUBLE(return_value, d) #define RETVAL_STRING(s, duplicate) ZVAL_STRING(return_value, s, duplicate) #define RETVAL_STRINGL(s, l, duplicate) ZVAL_STRINGL(return_value, s, l, duplicate) #define RETVAL_EMPTY_STRING() ZVAL_EMPTY_STRING(return_value) #define RETVAL_ZVAL(zv, copy, dtor) ZVAL_ZVAL(return_value, zv, copy, dtor) #define RETVAL_FALSE ZVAL_BOOL(return_value, 0) #define RETVAL_TRUE ZVAL_BOOL(return_value, 1) #define RETURN_RESOURCE(l) { RETVAL_RESOURCE(l); return; } #define RETURN_BOOL(b) { RETVAL_BOOL(b); return; } #define RETURN_NULL() { RETVAL_NULL(); return;} #define RETURN_LONG(l) { RETVAL_LONG(l); return; } #define RETURN_DOUBLE(d) { RETVAL_DOUBLE(d); return; } #define RETURN_STRING(s, duplicate) { RETVAL_STRING(s, duplicate); return; } #define RETURN_STRINGL(s, l, duplicate) { RETVAL_STRINGL(s, l, duplicate); return; } #define RETURN_EMPTY_STRING() { RETVAL_EMPTY_STRING(); return; } #define RETURN_ZVAL(zv, copy, dtor) { RETVAL_ZVAL(zv, copy, dtor); return; } #define RETURN_FALSE { RETVAL_FALSE; return; } #define RETURN_TRUE { RETVAL_TRUE; return; }
以上がこの記事の全内容です。その他の関連コンテンツについては、PHP 中国語 Web サイトをご覧ください。
関連する推奨事項:
PHP ソース コード 11 についての簡単な説明: array_key_exists、in_array の概要
簡単な説明PHP ソース コードについて 10: array_keys、array_values 関数について
# PHP ソース コードについての簡単な説明 9: array_unshift、array_push の概要
以上がPHP ソースコードの簡単な説明 12: return_value 戻り値についての詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。