Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erläuterung der PHP-Callback-Callback-Funktion

Detaillierte Erläuterung der PHP-Callback-Callback-Funktion

怪我咯
怪我咯Original
2017-06-19 13:29:495791Durchsuche

Seit PHP 5.4 kann der Callable-Typ zur Angabe des Callback-Typs Callback verwendet werden. Aus demselben Grund werden in diesem Dokument Rückruftypinformationen verwendet.

Einige Funktionen wie call_user_func() oder usort() können benutzerdefinierte Callback-Funktionen als Parameter akzeptieren. Die Rückruffunktion kann nicht nur eine einfache Funktion sein, sondern auch eine Objektmethode, einschließlich statischer Klassenmethoden.

Übergabe

Eine PHP-Funktion übergibt ihren Namen als String-Typ. Es kann jede integrierte oder benutzerdefinierte Funktion verwendet werden, mit Ausnahme von Sprachkonstrukten wie: array() , echo , empty() , eval() , exit() , isset() , list() , print oder unset() . Die Methoden eines instanziierten Objekts werden als Array übergeben, wobei Index 0 das Objekt und Index 1 den Methodennamen enthält.

Statische Klassenmethoden können auch ohne Instanziierung eines Objekts der Klasse übergeben werden, indem der Klassenname anstelle des Objekts in den Index 0 eingefügt wird. Seit PHP 5.2.3 ist es auch möglich, 'ClassName::methodName' zu übergeben.

Zusätzlich zu gewöhnlichen benutzerdefinierten Funktionen kann create_function() verwendet werden, um eine anonyme Rückruffunktion zu erstellen. Seit PHP 5.3.0 ist es auch möglich, einen Abschluss an den Callback-Parameter zu übergeben.

Beispiel #1 Rückruffunktionsbeispiel

Beispiel #2 Beispiel mit Abschluss
<?php 

// An example callback function
function  my_callback_function () {
    echo  &#39;hello world!&#39; ;
}

// An example callback method
class  MyClass  {
    static function  myCallbackMethod () {
        echo  &#39;Hello World!&#39; ;
    }
}

// Type 1: Simple callback
call_user_func ( &#39;my_callback_function&#39; ); 

// Type 2: Static class method call
call_user_func (array( &#39;MyClass&#39; ,  &#39;myCallbackMethod&#39; )); 

// Type 3: Object method call
$obj  = new  MyClass ();
call_user_func (array( $obj ,  &#39;myCallbackMethod&#39; ));

// Type 4: Static class method call (As of PHP 5.2.3)
call_user_func ( &#39;MyClass::myCallbackMethod&#39; );

// Type 5: Relative static class method call (As of PHP 5.3.0)
class  A  {
    public static function  who () {
        echo  "A\n" ;
    }
}

class  B  extends  A  {
    public static function  who () {
        echo  "B\n" ;
    }
}

call_user_func (array( &#39;B&#39; ,  &#39;parent::who&#39; ));  // A
?>

Die obige Routine gibt Folgendes aus:
<?php
// Our closure
$double  = function( $a ) {
    return  $a  *  2 ;
};

// This is our range of numbers
$numbers  =  range ( 1 ,  5 );

// Use the closure as a callback here to 
// double the size of each element in our 
// range
$new_numbers  =  array_map ( $double ,  $numbers );

print  implode ( &#39; &#39; ,  $new_numbers );
?>

Hinweis: In PHP 4 müssen Sie eine Referenz verwenden, um eine Rückruffunktion zu erstellen, die auf ein bestimmtes Objekt verweist, und nicht auf eine Kopie. Erläuterungen finden Sie im Zitat.
2 4 6 8 10

Wenn mehrere Rückrufe in einer Funktion registriert sind (z. B. bei Verwendung von call_user_func() und call_user_func_array()) und es im vorherigen Rückruf eine nicht abgefangene Ausnahme gibt, werden die nachfolgenden nicht mehr aufgerufen.

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der PHP-Callback-Callback-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