2013-08-12 18 views
7

znam tworzenia funkcji PHP umieszczony w górnej części pliku .php takich jak:Jak działają funkcje "function" i "use" oraz "array_filter" w PHP?

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

Następnie nazwać tak:

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

mam jakiś kod, ja nie zrobił” t zapisz go, który używa "funkcji" i "użyj" razem w ramach tradycyjnego użycia funkcji jak moja_funkcja powyżej.

Jestem zdziwiony tym i mam kilka pytań dla bardziej doświadczonych programistów PHP. Oto część roboczą kodu PHP mam na myśli:

$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 nie jest ustawiony w dowolnej części funkcji lub pozostałej części programu, więc to, co jest za pomocą $e? Jak jest przekazywana wartość i jak jest używana? Wydaje się, że nie ma nazwy dla tej funkcji, więc nie wiem, jak to się nazywa, jak to się robi?

Czy to jest tworzenie funkcji, która ma być używana w locie i która jest ponownie generowana za każdym razem, gdy ten kod zostanie wywołany? Jeśli jest to funkcja, dlaczego nie utworzyć jej poza tą funkcją i wywołać ją?

Ja również nie używałem jeszcze "użytkowania", więc to mi nie jest znane. Sprawdziłem to na php.net i wygląda to tylko na sposób przypisania czegoś wartości, ale nie mogłem znaleźć praktycznych przykładów, aby pokazać, dlaczego jest on potrzebny i kiedy należy go użyć.

Sprawdziłem array_filter i powiedziałem, że to "Filtruje elementy tablicy za pomocą funkcji zwrotnej". Nie wiem, co to jest funkcja oddzwaniania. Czy to odnosi się do function($e)?

Czy powyższy wiersz kodu PHP dla $neededObject powinien być sformatowany inaczej, aby łatwiej było go odczytać?

+1

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

+0

PHP jest takie niesamowite, ma inne argumenty nt kolejność dla 'array_map()' i 'array_filter()'. PHP powie ci, jeśli robisz to źle, ale nadal. Dziwne. – Rudie

Odpowiedz

6

Użyjmy numeru array_map(), aby wyjaśnić, co się dzieje.

Chcemy zduplikować dane wejściowe tablicy: więc jeśli dane wejściowe to aa, wyjście będzie miało postać aaaa.

Więc normalny sposób byłoby utworzyć funkcję, a następnie przekazać je do array_map():

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

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

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

Online demo

Ale co zrobić, jeśli chcesz korzystać z tej funkcji tylko raz? Od PHP 5.3, istnieje coś, co nazywa anonymous functions używamy go tak:

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

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

Online demo

Teraz, powiedzmy na przykład chcesz dodać standardowej wartości z innej zmiennej. To proste w przypadku zmiennych globalnych. Ale jak wiemy, zmienne globalne są złe i należy ich unikać. Możemy wykorzystać use():

$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() można stać się również przydatna, gdy używamy odniesienie do zapisu zmiennej zewnętrznej podczas zapętlenie:

$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

Zmienna działa jako normalny parametr funkcyjny, a zatem jest przekazywana przez kod wywołujący funkcję, patrz dokumentacja dla wartości $e przy użyciu array_filter.

Instrukcja use importuje zmienne z zakresu lokalnego do zakresu anonymous' function.

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

Jeśli nie zawierała use ($myvar) część, następnie isset($myvar) będzie return false z wewnątrz funkcja anonimowa, ponieważ ma osobny zakres.