Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erläuterung der Verwendung des Rückgabewerts der benutzerdefinierten PHP-Funktion

Detaillierte Erläuterung der Verwendung des Rückgabewerts der benutzerdefinierten PHP-Funktion

伊谢尔伦
伊谢尔伦Original
2017-06-27 09:15:116332Durchsuche

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 refcount
Z_TYPE_P(return_value) = IS_LONG;  
Z_LVAL_P(return_value) = 42;
-Attribute von return_value

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;
Lassen Sie uns nun einen Blick auf diese spezielle Funktion werfen und sie zu Kapitel 5 „Ihre erste In“ hinzufügen Beispielerweiterung, die in „Erweiterung“ erstellt wurde. Fügen Sie einfach diese Funktion unter der Funktion „sample_hello_world()“ hinzu und fügen Sie „sample_long()“ zur Struktur „php_sample_functions“ hinzu

:

Jetzt können Sie „make“ ausführen um die Erweiterung neu zu erstellen.

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!

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