문제

php에는 keat_function () 함수가있어 다음과 같이 고유 한 Lambda 함수를 만듭니다.

$myFunction = create_function('$foo', 'return $foo;');
$myFunction('bar'); //Returns bar

이것은 실제로 더 낫습니다 (더 쉬운 것 외에).

do{
 $myFunction = 'createdFunction_'.rand();
}
while(function_exists($myFunction));
eval("function $myFunction(\$foo) { return \$foo; }");
$myFunction('bar'); //Returns bar

create_function이 정말 더 좋습니까? (더 쉽다는 사실과는 별도로)

도움이 되었습니까?

해결책

관련 문서에 대한 나의 이해에 대해 [1] 그들은 둘 다 같은 일을한다. create_function ()은 당신을 위해 고유 한 함수 이름을 제시한다.

이 질문에 대한 다른 의견을 다루기 위해 :

Create_function은 변수에 할당 할 수 있으며 코드의 다른 부분에 기능을 액세스 할 수있는 반면 Eval은 주어진 범위에만 유용합니다.

Eval ()가 현재 범위에서 실행되지만 기능 정의는 어쨌든 글로벌 네임 스페이스에 덤프됩니다. [2] 따라서 기능을 정의 할 때마다 프로그램의 다른 곳에서는 액세스 할 수 있습니다.

eval ()을 사용하면 글로벌 함수 목록을 혼란스럽게합니다. create_function ()

create_function ()은 새로운 함수의 이름으로 문자열 만 리턴합니다. [3] 일부 특수 콜백 유형은 아닙니다. 따라서 두 기술 모두 글로벌 네임 스페이스를 오염시킵니다.

따라서 Create_function ()가 더 쉬워지는 것 외에는 eval ()보다 더 나은 것으로 보이지 않습니다.

각주 :

[1] http://au2.php.net/manual/functions.user-defined.php ; http://au.php.net/create_function ; http://au.php.net/eval

[2] http://au2.php.net/manual/functions.user-defined.php

[3] http://au.php.net/create_function

다른 팁

eval ()을 사용하면 글로벌 함수 목록을 혼란스럽게합니다. Create_Function ()은 큰 차이가 없다는 것 외에는 그렇지 않습니다. 하지만, 두 가지 방법 모두 오류가 발생하기 쉬운 PHP 문자열 내에 기능 본문을 작성해야하며 내 프로젝트에서 작업중인 경우 일반 구문을 사용하여 도우미 기능을 선언하도록 주문합니다.

PHP의 익명 함수는 너무 잘 구현되어 코드가 실제로 더 나은 것입니다. ~ 아니다 그들을 사용합니다. (고맙게도 이것은 PHP 5.3에서 고정 될 것입니다).

개인적으로 Create_Function ()이 배열을 정렬 할 때 매우 편리하다는 것을 알았습니다.

사실, 방금 웹을 검색했는데 PHP 문서에 좋은 예가있는 것 같습니다.

http://us.php.net/create_function

아래로 스크롤하십시오 예 #3 익명 함수를 콜백 함수로 사용합니다.

create_function 코드의 다른 부분에 기능을 액세스 할 수 있도록 변수에 할당 할 수 있지만 eval 주어진 범위에만 유용합니다.

(더 쉽다는 사실과는 별도로)

나는 당신이 이것을 어떻게 그렇게 쉽게 무시할 수 있는지 이해하지 못합니다. 두 가지 예를 감안할 때, 한 눈에 이해하기 쉬운 것은 무엇입니까? create_function은 당신이 달성하려는 것을 알려줍니다. 평가하지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top