2012-06-26 6 views
1

설명하기가 조금 힘들지만 최선을 다할 것입니다. 클로저의 인스턴스를 만드는 가장 좋은 방법을 찾으려고합니다. 아래는 내가 만들고 폐쇄에 접근하고 방법의 예는 다음과 같습니다PHP 클로저 인스턴스 5.3

$myvar->parse('var1, var2', function() { 
    //my code 
}); 

I 다음 쉼표를 폭발하고과 같이 배열에 넣어하여 문자열을 반복.

$array = array(); 
$array['var1'] = closure(); 
$array['var2'] = closure(); 

나중에 내 코드에 call_user_func을 사용하여 기능을 실행합니다.

지금 내가 가지고있는 문제는 $array['var1']에 액세스 할 때 아무런 문제없이 클로저가 호출된다는 것입니다.

그러나 $array['var2']에 액세스하면 아무런 효과가 없습니다. 나는 많은 행운이없이 잠시 동안 다양한 웹 사이트를보고있었습니다. 포인터를 사용하거나 (성공하지 않고 시도해야합니까?) 어떻게 든 새 인스턴스를 만들어야합니까?

나는 현재 단지 내 서버에 5.3을 PHP로 액세스 할 수 있습니다, 그래서 당신이 가질 수있는 피드백과 조언을 주셔서 감사합니다 정말 거라고 5.4 :(

에서 멋진 물건을 사용할 수 없습니다.

+1

: 당신의 구문 분석 기능 (왜 문자열이 아닌 배열을 가지고 가는가를)에서

, 난 당신이 원하는 것 같은데요? – Niko

+0

다른 사람들이 답변에 나타 났으므로 귀하의 설명이 다소 실패합니다. 내가 볼 수있는 가장 시각적 인 차이점은 여러분이 게시 한 첫 번째 코드 예제와'closure()'표현식 사이의 차이입니다. 그들은 완전히 무관합니다. 따라서 예를 들어'var_dump (closure()); '가 출력하는 것을 알려줄 수 있습니다. – hakre

+0

@Niko : PHP에서 클로저의 인스턴스는 함수 호출의 변수 또는 매개 변수를 따라 전달되고 전달 될 수있는 'Closure'유형의 객체의 인스턴스입니다. 원래, PHP 언어의 구현자는 버전 5에서 자세히 설명합니다.3은 closure가 Closure라는 새로운 유형의 객체라는 사실을 숨기려고했지만 PHP는 인터넷과 관련된 언어 였고 인터넷은 특정 기능 뒤에 숨겨진 많은 기능을 허용하지 않기 때문에 5.3에있는 "새로운"호출 가능 유형은 인스턴스가있는 'Closure'유형의 객체라는 사실을 대중이 인식하게되었습니다. – hakre

답변

0

예 귀하의 질문은 명확하지 않다. 당신은 내가 더 잘 설명하지 않은 이유를 궁금해 알고 있었다.

어쨌든 특별히 이런 코드 뭔가에 넣어 당신이 한 $array['var2'] 내부에 저장된 폐쇄를 실행해야하는 경우 :

당신의 코드를 추측하여 유일한 방법을

있어210

, 함수의 구문 분석은 좋아한다 :

function parse($keys,$func) { 
$array = array(); 
foreach(explode(',',$keys) as $v) { 
    $array[trim($v)] = $func; //> trim important here! 
} 
} 

는 대부분의 경우 당신이 폐쇄를 할당합니다 trim($v)

+0

더 잘 설명하지 못해 사과드립니다. 내가 게시하고 조금 피곤한 곳에서 늦은 시간이었습니다. 내 잘못이야. @Wrikken (위) 사용 - 조금 더 나은 내 문제를 설명했다. 나는 두 분이 올린 것을 시도 할 것입니다. 감사. –

+1

당신이 옳았습니다. 나는 손질을 사용하는 것을 잊었다! 내 나쁜 .. 도움을 주셔서 감사합니다 –

1
$yourcall = function() { 
    //code 
    }; 

    $array['var1'] = $yourcall; 
    $array['var2'] = $yourcall; 

을 잊었습니다 그 값들. 그러나 :

$array['var1'] = $yourcall(); 
    $array['var2'] = $yourcall(); 

당신은 에게 배열 항목에 그 폐쇄를 호출 한 결과를 할당 할 것 같다으로.

도대체 "폐쇄의 인스턴스"무엇
function parse($string,$closure){ 
     $array = array(); 
     foreach(explode(',',$string) as $key) $array[$key] = $closure; 
     return $array; 
    } 
+0

내 문제를 조사해 주셔서 고마워 .. 내가 한 것보다 더 설명해 봤어 .. 내가 쓴 것을 시험 해보겠습니다. –

+0

OP와 동일한 오류가 발생했습니다. 자르기를 잊어 버렸습니다.() – dynamic

+0

Pfah, 나는 더 나은 제안을했습니다. 실제로 그것을 배열에 공급하고, 우려를 분리합니다 : P – Wrikken