Heim  >  Artikel  >  Backend-Entwicklung  >  Eine kurze Diskussion des PHP-Quellcodes 12: Über den Rückgabewert von return_value

Eine kurze Diskussion des PHP-Quellcodes 12: Über den Rückgabewert von return_value

不言
不言Original
2018-06-28 17:15:011998Durchsuche

Dieser Artikel führt hauptsächlich eine kurze Diskussion über PHP-Quellcode 12 ein: In Bezug auf return_value hat der Rückgabewert einen bestimmten Referenzwert. Jetzt können Freunde in Not darauf verweisen Quellcode von PHP Seit einiger Zeit weiß ich, dass Sie den Wert dieser Funktion zurückgeben können, solange Sie PHP_FUNCTION in einer Erweiterungsfunktion verwenden und den Wert return_value zuweisen.

Dann habe ich den Code selbst verfolgt, dass es eine globale Variable wie return_value oder eine globale Hashtabelle gibt, die return_value enthält, aber ich habe sie nie gefunden, bis ich Brother gefragt habe Niao heute wurde mir plötzlich klar, dass Niao Brother in der E-Mail sagte: „return_value ist ein Parameter in PHP, der die Funktion PHP_FUCTION für PHP-Skripte bereitstellt, erweitert durch Makros. Durch das Kopieren dieses Parameters gibt ZE den Wert an den Front-End-Aufruf zurück.“ Skript. "


Die Makrodefinition lautet wie folgt:

 #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

Einige integrierte Funktionen (z. B. every) verwenden direkt ZEND_FUNCTION

Erweiterungsfunktionen verwenden PHP_FUNCTION

In Bei einigen Erweiterungsfunktionen sehen wir oft, dass einige nicht return_value verwenden, sondern stattdessen einige Makros verwenden, die return_value enthalten.
Gemeinsame Makros sind wie folgt:

  //    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; }

Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, er wird für das Lernen aller hilfreich sein. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website.

Verwandte Empfehlungen:

Ein kurzer Vortrag über PHP-Quellcode 11: Einführung in array_key_exists, in_array


Ein kurzer Vortrag über PHP-Quellcode Zehn: Über array_keys, array_values ​​​​Funktionen


Kurze Diskussion über PHP-Quellcode Neun: Einführung in array_unshift, array_push

Das obige ist der detaillierte Inhalt vonEine kurze Diskussion des PHP-Quellcodes 12: Über den Rückgabewert von return_value. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn