2013-08-12 8 views
7

내가 같은 .PHP 파일의 상단에 배치 PHP 함수를 만드는 잘 알고 :'function', 'use'및 'array_filter'는 PHP에서 어떻게 작동합니까?

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

를 다음과 같이 호출 :

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

을 좀 코드가, 나는 'didn를 위의 my_little_function과 같은 함수의 전통적인 사용 내에서 "function"과 "use"를 함께 사용하여 작성하십시오.

나는 이것에 당혹스럽고 좀 더 숙련 된 PHP 개발자를 위해 몇 가지 질문을합니다. 여기에 내가 말하는 겁니다 작업 PHP 코드의 일부입니다

$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이 기능 또는 프로그램의 나머지 부분의 어떤 부분에 설정되어 있지 않은, 그래서 $e를 사용하여 무엇? 가치를 어떻게 얻고 어떻게 사용하고 있습니까? 이 함수에 대한 이름이없는 것 같습니다. 그래서 어떻게 호출되는지 알 수 없습니다. 어떻게 수행되고 있습니까?

이 기능은 사용 중일 때마다 작성되며이 코드가 호출 될 때마다 다시 생성됩니까? 그것이 함수라면,이 함수 밖에서 함수를 생성하고 호출하지 않을까요?

나는 아직 '사용'을 사용하지 않았기 때문에 나에게 익숙하지 않습니다. 나는 그것을 php.net에서 찾았지만 가치를 할당하는 방법처럼 보였지만 필요한 이유와 사용시기를 보여줄 수있는 실용적인 예제를 찾을 수 없었다.

나는 array_filter을 찾았으며 "콜백 함수를 사용하여 배열의 요소를 필터링합니다"라고 말합니다. 콜백 기능이 무엇인지 모르겠습니다. function($e)을 말하는 것입니까?

$neededObject에 대한 PHP 코드의 위 줄은 다르게 서식을 지정하여 읽기 쉬워야합니까?

+1

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

+0

PHP는 정말 멋져요. 다른 주장이 있습니다. 'array_map()'과'array_filter()'에 대한 nt 순서. PHP가 잘못했는지 알려줄 것입니다. 기묘한. – Rudie

답변

6

array_map()을 사용하여 진행 상황을 설명합니다.

배열의 입력을 복제하려고합니다. 따라서 입력이 aa 인 경우 aaaa이됩니다.

그래서 정상적인 방법으로 함수를 만든 다음 array_map()에 전달하는 것입니다 :

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

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

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

Online demo

하지만 한 번만이 기능을 사용하려면? PHP 5.3때문에, anonymous functions라는 것이 있습니다, 우리는 다음과 같이 사용 :

Online demo

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

$new_array = array_map(function($string){ 
    return $string.$string; 
}, $array); 
print_r($new_array); 
이제, 다른 변수에서 표준 값을 추가 할 예를 들어 가정 해 봅시다. 전역 변수를 사용하면 쉽습니다. 그러나 우리가 알다시피 세계 변수는 악의가 없으므로 피해야합니다. 우리는 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()도 유용 될 수 있습니다 우리는 외부 변수에 쓰기에 대한 참조를 사용하면 반복하는 동안 :

$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

변수는 일반 함수 매개 변수의 역할을하므로 함수를 호출하는 코드에서 전달됩니다. array_filter을 사용할 경우 $e 값에 대한 설명서를 참조하십시오.

use 문은 로컬 범위의 변수를 anonymous' function의 범위로 가져옵니다. 당신이 use ($myvar) 부분이 포함되지 않은 경우는 별도의 범위를 가지고 있기 때문에

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

isset($myvar)
내부 에서 익명 함수를 false를 반환합니다.

관련 문제