Rückgabewert
Benutzerbereich Funktion verwendet das Schlüsselwort „return“, um Informationen an seinen aufrufenden Bereich zurückzugeben, was der Syntax der C-Sprache entspricht.
Zum Beispiel:
function sample_long() { return 42; } $bar = sample_long();
Wenn sample_long() aufgerufen wird, wird 42 zurückgegeben und auf die Variable $bar gesetzt. Der entsprechende Code in der C-Sprache lautet wie folgt:
int sample_long(void) { return 42; } void main(void) { int bar = sample_long(); }
Natürlich wissen Sie in der C-Sprache immer, was die aufgerufene Funktion ist, und sie wird basierend auf dem Funktionsprototyp zurückgegeben. Daher müssen Sie dementsprechend die Variable definieren, in der das Rückgabeergebnis bei der Verarbeitung im PHP-Benutzerbereich gespeichert wird , der Variablentyp ist dynamisch. Verlassen Sie sich stattdessen auf den zval-Typ, der in Kapitel 2 „Ins und Outs von Variablen“ eingeführt wurde.
return_value-Variable
Sie könnten denken, dass Ihre interne Funktion sollte einen zval direkt zurückgeben oder den Speicherplatz eines zval zuweisen und zval * zurückgeben.
PHP_FUNCTION(sample_long_wrong) { zval *retval; MAKE_STD_ZVAL(retval); ZVAL_LONG(retval, 42); return retval; }
Leider ist dies nicht für jede Funktion obligatorisch, einen zval zuzuweisen und ihn zurückzugeben . Stattdessen weist die Zend-Engine diesen Platz vor dem Funktionsaufruf zu. Initialisieren Sie dann den Typ von zval und übergeben Sie den Wert als Parameternamen return_value Seien Sie vorsichtig. Darüber hinaus gibt die PHP_FUNCTION()-Implementierung keinen Wert direkt zurück, sondern die entsprechenden Daten werden direkt in den Parameter return_value eingefügt und von der Zend-Engine verarbeitet, nachdem die interne Funktion ausgeführt wurde Freundliche Erinnerung: ZVAL_LONG Das ()-Makro ist eine Kapselung mehrerer Zuweisungsoperationen:
PHP_FUNCTION(sample_long) { ZVAL_LONG(return_value, 42); return; }
oder direkter:
is_ref- und refcountZ_TYPE_P(return_value) = IS_LONG; Z_LVAL_P(return_value) = 42;
sollten Nicht direkt durch interne Funktionen geändert. Diese Werte werden von der Zend-Engine beim Aufruf Ihrer Funktion initialisiert und verarbeitet.
return_value->type = IS_LONG; return_value->value.lval = 42;
Wenn alles in Ordnung ist, können Sie PHP ausführen und die neue Funktion testen:
$ php -r 'var_dump(sample_long());static function_entry php_sample_functions[] = { PHP_FE(sample_hello_world, NULL) PHP_FE(sample_long, NULL) { NULL, NULL, NULL } };
Kompaktere Makros umschließen
Im Hinblick auf die Lesbarkeit und Wartbarkeit des Codes gibt es wiederholte Teile im Makro ZVAL_*(): Variable return_value. Ersetzen Sie in diesem Fall den ZVAL des Makros durch RETVAL. Wir können return_value weglassen beim Aufruf.
Im vorherigen Beispiel kann der Implementierungscode von sample_long() wie folgt reduziert werden:
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Verwendung des Rückgabewerts der benutzerdefinierten PHP-Funktion. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!