PHP ソースコードの簡単な説明 12: return_value 戻り値について

不言
リリース: 2023-04-01 22:06:01
オリジナル
2003 人が閲覧しました

この記事では主に 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート