2013-08-12 4 views
7

Ich kenne eine PHP-Funktion an der Spitze der Php-Datei wie platziert erstellen:Wie funktioniert ‚Funktion‘ und ‚Verwendung‘ und "array_filter Arbeit in PHP?

function my_little_function($parm1,$parm2) { 
    if ($parms < $parm2) { 
    return "yes"; 
    } else { 
    return "no"; 
    } 
} 

Dann rufen Sie es wie folgt aus:

$result = my_little_function("1","2"); 
echo "The answer is $result." . "\n"; 

ich einen Code haben, ich didn‘ t schreiben Sie es, das "Funktion" und "Gebrauch" zusammen innerhalb einer traditionellen Verwendung einer Funktion wie my_little_function oben verwendet.

Ich bin verwirrt durch diese und habe einige Fragen für Sie erfahrene PHP-Entwickler. Hier ist ein Teil des PHP-Code arbeitet Ich beziehe mich auf:

$neededObject = array_filter($st_ny_trip->STOPS->STOP,function($e) use ($final_desired_dest,$connect_raw){return $e->NAME == $final_desired_dest && DateTime::createFromFormat("m/d/Y g:i:s a", $e->TIME) > $connect_raw;}); 

$e ist nicht in jedem Teil der Funktion oder der Rest des Programms festgelegt, so was $e verwendet? Wie wird ein Wert weitergegeben und wie wird er verwendet? Es scheint keinen Namen für diese Funktion zu geben, also weiß ich nicht, wie es heißt, wie wird das gemacht?

schafft dies eine Funktion, on-the-fly verwendet werden und es wird neu generiert jedes Mal dieser Code aufgerufen wird? Wenn es eine Funktion ist, warum nicht außerhalb dieser Funktion erstellen und aufrufen?

Ich habe auch nicht verwendet ‚Verwendung‘ mich noch, so dass mir nicht vertraut ist. Ich sah es auf php.net und es sieht aus wie ein Weg, um einen Wert zu etwas zuweisen, aber ich konnte keine praktische Beispiele finden zeigen, warum sie gebraucht wird und wenn es verwendet werden soll.

sah ich array_filter und es sagt, dass es „Filtert Elemente eines Arrays mittels einer Callback-Funktion“ ist. Ich weiß nicht, was eine Rückruffunktion ist. Bezieht es sich auf function($e)?

Sollte die obige PHP-Codezeile für $neededObject anders formatiert sein, damit sie einfacher zu lesen ist?

+1

http: //php.net/manual/en/functions.anonymous.php – NDM

+0

PHP ist so toll, es hat eine andere argume Reihenfolge für 'array_map()' und 'array_filter()'. PHP wird Ihnen sagen, wenn Sie es falsch machen, aber immer noch. Seltsam. – Rudie

Antwort

6

Lassen Sie uns array_map() verwenden, um zu erklären, was vor sich geht.

Wir wollen die Eingabe eines Arrays duplizieren: Wenn also die Eingabe aa ist, wäre die Ausgabe aaaa.

So ist der normale Weg wäre, eine Funktion zu erstellen und es dann passieren zu array_map():

$array = range('a', 'e'); 

$new_array = array_map('duplicate', $array); 
print_r($new_array); 

function duplicate($string){ 
    return $string.$string; 
} 

Online demo

Aber was, wenn Sie diese Funktion verwenden möchten, nur einmal? Seit PHP 5.3, etwas anonymous functions genannt ist, verwenden wir es wie folgt aus:

$array = range('a', 'e'); 

$new_array = array_map(function($string){ 
    return $string.$string; 
}, $array); 
print_r($new_array); 

Online demo

Nun lassen Sie uns zum Beispiel sagen, dass Sie einen Standardwert von einer anderen Variablen hinzufügen möchten. Das ist einfach mit globalen Variablen. Aber wie wir wissen, sind globale Variablen böse und sollten vermieden werden. Wir können use() verwenden:

$array = range('a', 'e'); 
$standard_value = ','; 

$new_array = array_map(function($string)use($standard_value){ 
     // $standard_value becomes available inside the function 
    return $string.$standard_value.$string; 
}, $array); 
print_r($new_array); 

Online demo

use() kann auch nützlich sein, wenn wir eine Referenz verwenden, um eine externe Variable zu schreiben, während Looping:

$array = range('a', 'e'); 
$another_string = ''; 

$new_array = array_map(function($string)use(&$another_string){// note & 
    $another_string .= $string.$string; // overwrite $another_string 
    return $string.$string; 
}, $array); 
print_r($new_array); 
echo PHP_EOL . $another_string; 

Online demo

2

die $e Variable fungiert als normale Funktionsparameter und wird somit durch die die Funktion finden Sie in der Dokumentation für den Wert von $e bei der Verwendung von array_filter Aufruf Code übergeben werden.

Die Anweisung use importiert Variablen aus dem lokalen Bereich in den Bereich anonymous' function.

$myvar = 'world'; 
$myFunc = function ($test) use ($myvar) { 
    return $test . ' ' . $myvar; 
}; 
echo $myFunc('hello'); // echoes 'hello world'; 

Wenn Sie den use ($myvar) Teil nicht enthalten sind, dann würde isset($myvar) von innen die anonymen Funktion false zurück, da es einen separaten Bereich verfügt.