2012-09-15 2 views
0

나는 다음과 같은클래스의 전용 함수 안에있는 함수의 변수 값을 얻으려면 어떻게해야합니까?

나는 기능 do_something_else() 내부 $conf에 액세스 할
<?php 
class Test{ 
    var $conf = array('a' => 1, 'b' => 2, c => 3); 

    private function do_something(){ 
    // Do something Here 
    function do_something_else(){ 
     // How to get the variable value for $conf ???? o.O 
    } 
    } 
} 
?> 

같은 PHP 클래스가 있습니다. 상위 레벨 함수에서 이걸 $this->conf으로 액세스 할 수 있지만 $this은 내부 함수에서 사용할 수 없다고 생각합니다. 함수 내부의 변수에 액세스하는 최선의 방법은 무엇입니까?

이 함수는 WordPress CMS의 기본 제공 함수에서 호출되므로 값을 전달할 수 없으므로 전달 인수는 여기에서 선택할 수 없습니다.

+1

하지 마십시오 유지하지. 중첩 된 함수는 ** 깨끗하게 보일 수 있지만 보이지는 않습니다. 중첩 된 함수는 일반 함수와 동일하지만 (즉 전역 함수) 상위 함수가 호출 될 때만 정의됩니다. 다시는 제발하지 마세요. –

답변

3

저는 익명의 기능이 필요하다고 생각합니다. 여기에 몇 가지 해결책이 있습니다.

class Test{ 
    var $conf = array('a' => 1, 'b' => 2, 'c' => 3); 

    private function do_something(){ 
     // Do something Here 
     $that = $this; 
     $do_something_else = function() use($that) { 
      echo $that->conf; 
     }; 

     $do_something_else(); 
    } 
} 

또는 anonymous 기능 만 PHP 5.4에서 직접 $this를 사용 당신은 PHP 5.3에서 할 수 있습니다.

+0

+1 익명 함수 종료는 내가 아는 한 그가 원하는 것을 성취 할 수있는 유일한 방법입니다. –

+0

이것은 유망 해 보입니다. 답장을 보내 주셔서 감사합니다 :) – Amyth

+0

Perfect, Thanks! – Amyth

1

이유는 간단

<?php 
class Test{ 
    private $conf; 

    private function _construct() 
    { 
    $this->conf = array('a' => 1, 'b' => 2, c => 3); 
    } 
    private function do_something_else(){ 
     // How to get the variable value for $conf ???? o.O 
     // NOW THIS BIT IS EASY $this->conf; 
    } 
    private function do_something(){ 
    // Do something Here 

    } 
} 
?> 
+0

... 그렇다면 afaik는'Test' 클래스에 대해 모르는 것에서'do_something_else()'를 콜백으로 사용할 수 없습니다. –

+0

@JoachimIsaksson - 질문에서이를 명시하지 않았습니다. 그렇더라도 인터페이스를 사용하십시오. 더 간단하고 이해하기 쉽습니다. –

+0

이 질문은이 기능이 내장 된 Wordpress 기능에서 호출되어야한다고 말합니다.이 기능은 Wordpress를 변경하여 인터페이스를 조정하거나 "교량 코드"를 추가로 작성해야합니다. 장기적으로는 더 나을 것이지만, 아마도 자신의 통증이없는 해결책은 아닙니다. –

관련 문제