2013-10-11 2 views
4

익명 함수 array_map 내 개체 메서드 중 하나를 호출하려고합니다. 지금까지 내가 예상되는 오류가 발생하고있다 :배열 메서드 내에서 클래스 메서드 호출 익명 함수

나는이 오류가있는 이유, 난 그냥 ... 사람이 어떤 제안이 있습니까하려고 무엇을 달성 할 수있는 방법을 모르는 알고

Fatal error: Using $this when not in object context in...

? 여기

내 현재 코드입니다 : 당신은이

$host = $this; 
array_map(function($value) use ($host) { 
    return $host->some_method($value,'value',false); 
},$this->mssql->data[0]['results'][0]); 
+0

클로저에 '$ this'에 대한 지원이 추가 된 PHP 5.4로 업그레이드하십시오. – igorw

답변

5

, 당신은 호출 할 수 있습니다 클래스 컨텍스트에서 맵 기능을 사용하면 오류가 발생하지 않습니다. Like :

class A { 

     public $mssql = array(
       'some output' 
      ); 

     public function method() 
     { 
      array_map(function($value){ 
       return $this->mapMethod($value,'value',false); 
      },$this->mssql); 

     } 

     public function mapMethod($value) 
     { 
      // your map callback here 
      echo $value; 

     } 


    } 

    $a = new A(); 

    $a->method(); 
+0

오브젝트는 참조에 의해 이미 전달 되었기 때문에 '& $ object'와 같이 참조로 오브젝트를 전달할 필요가 없습니다. –

+0

@ Glavić right, fixed – Cillier

0

또한 키워드를 "사용"를 사용하여 $이 변수를 "이상 종료"하는 기능을 말할 수

// Loop through the data and ensure the numbers are formatted correctly 
array_map(function($value){ 
    return $this->some_method($value,'value',false); 
},$this->mssql->data[0]['results'][0]); 
+0

이것은 정확히 내가하고있는 일이다! –

+0

흠, 코드가 정확히 똑같은지 잘 모르겠다. 그렇게한다면 오류가 발생하지 않을 것이고, 나는 꽤 확신한다. –

+0

이 구문은 5.3 이상의 PHP 버전에서만 작동합니다. –

관련 문제