Heim  >  Artikel  >  Backend-Entwicklung  >  Einige Anwendungsbeispiele für anonyme PHP-Funktionen

Einige Anwendungsbeispiele für anonyme PHP-Funktionen

怪我咯
怪我咯Original
2017-06-28 11:55:581279Durchsuche

Anonyme Funktionen (Anonyme Funktionen), auch Abschlüsse genannt, ermöglichen das vorübergehende Erstellen einer Funktion ohne angegebenen Namen. Am häufigsten als Wert des (Callback)-Parameters der Callback-Funktion verwendet. Natürlich gibt es auch andere Anwendungen.

Beispiel #1 Anonymes Funktionsbeispiel

<?php
echo  preg_replace_callback ( &#39;~-([a-z])~&#39; , function ( $match ) {
    return  strtoupper ( $match [ 1 ]);
},  &#39;hello-world&#39; );
// 输出 helloWorld
?>

Abschlussfunktionen können auch als Wert von Variablen verwendet werden. PHP konvertiert einen solchen Ausdruck automatisch in eine Objektinstanz der integrierten Klasse Closure. Die Methode zum Zuweisen eines Abschlussobjekts zu einer Variablen ist dieselbe wie die Syntax der gewöhnlichen Variablenzuweisung, und am Ende muss ein Semikolon hinzugefügt werden:

Beispiel #2 Beispiel für die Zuweisung anonymer Funktionsvariablen

<?php
$greet  = function( $name )
{
     printf ( "Hello %s\r\n" ,  $name );
};

$greet ( &#39;World&#39; );
$greet ( &#39;PHP&#39; );
?>

Abschlüsse können Variablen vom übergeordneten Bereich erben. Solche Variablen sollten mithilfe des Sprachkonstrukts use übergeben werden.

Beispiel #3 Variablen vom übergeordneten Bereich erben

<?php
$message  =  &#39;hello&#39; ;

// 没有 "use"
$example  = function () {
     var_dump ( $message );
};
echo  $example ();

// 继承 $message
$example  = function () use ( $message ) {
     var_dump ( $message );
};
echo  $example ();

// Inherited variable&#39;s value is from when the function
// is defined, not when called
$message  =  &#39;world&#39; ;
echo  $example ();

// Reset message
$message  =  &#39;hello&#39; ;

// Inherit by-reference
$example  = function () use (& $message ) {
     var_dump ( $message );
};
echo  $example ();

// The changed value in the parent scope
// is reflected inside the function call
$message  =  &#39;world&#39; ;
echo  $example ();

// Closures can also accept regular arguments
$example  = function ( $arg ) use ( $message ) {
     var_dump ( $arg  .  &#39; &#39;  .  $message );
};
$example ( "hello" );
?>

Die Ausgabe der obigen Routine ähnelt der:

Notice: Undefined variable: message in /example.php on line 6
NULL
string(5) "hello"
string(5) "hello"
string(5) "hello"
string(5) "world"
string(11) "hello world"

Diese Variablen müssen in der Funktion oder enthalten sein Klasse-Header-Anweisung. Das Erben von Variablen aus dem übergeordneten Bereich unterscheidet sich von der Verwendung globaler Variablen. Globale Variablen existieren in einem globalen Bereich, unabhängig davon, welche Funktion gerade ausgeführt wird. Der übergeordnete Bereich eines Abschlusses ist die Funktion, die den Abschluss definiert (nicht unbedingt die Funktion, die ihn aufruft). Beispiele sind wie folgt:

Beispiel Nr. 4 Abschlüsse und Bereiche

<?php
// 一个基本的购物车,包括一些已经添加的商品和每种商品的数量。
// 其中有一个方法用来计算购物车中所有商品的总价格,该方法使
// 用了一个 closure 作为回调函数。
class  Cart
{
    const  PRICE_BUTTER   =  1.00 ;
    const  PRICE_MILK     =  3.00 ;
    const  PRICE_EGGS     =  6.95 ;

    protected    $products  = array();
    
    public function  add ( $product ,  $quantity )
    {
         $this -> products [ $product ] =  $quantity ;
    }
    
    public function  getQuantity ( $product )
    {
        return isset( $this -> products [ $product ]) ?  $this -> products [ $product ] :
                FALSE ;
    }
    
    public function  getTotal ( $tax )
    {
         $total  =  0.00 ;
        
         $callback  =
            function ( $quantity ,  $product ) use ( $tax , & $total )
            {
                 $pricePerItem  =  constant ( CLASS  .  "::PRICE_"  .
                     strtoupper ( $product ));
                 $total  += ( $pricePerItem  *  $quantity ) * ( $tax  +  1.0 );
            };
        
         array_walk ( $this -> products ,  $callback );
        return  round ( $total ,  2 );;
    }
}

$my_cart  = new  Cart ;

// 往购物车里添加条目
$my_cart -> add ( &#39;butter&#39; ,  1 );
$my_cart -> add ( &#39;milk&#39; ,  3 );
$my_cart -> add ( &#39;eggs&#39; ,  6 );

// 打出出总价格,其中有 5% 的销售税.
print  $my_cart -> getTotal ( 0.05 ) .  "\n" ;
// 最后结果是 54.29
?>

Anonyme Funktionen werden derzeit über die Closure-Klasse implementiert.


Version Beschreibung


5.4.0 $dies kann für anonyme Funktionen verwendet werden.

5.3.0 Anonyme Funktionen können genutzt werden.


Das obige ist der detaillierte Inhalt vonEinige Anwendungsbeispiele für anonyme PHP-Funktionen. 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