2017-01-05 6 views
3

재귀 호출 후 (매개 변수로 전송하지 않고) 변수를 사용할 수 있습니까? 예를 들어매개 변수로 전송하지 않고 이전 호출에서 이전 호출 매개 변수 사용 -

: 여기

class Doc { 

    public function readDoc($file, $recursion = false) { 
     if ($recursion != false) { 
      // DO SOMETHING; 
     } 
     $filename = $file."Some added text"; 
     $this->readDoc($filename, 1); 
    } 
} 

이 가능 제 호출합니다 (readDoc() 재귀 함수를 호출 할 때)에서 전송 $file의 값을 사용하는 것이다.

답변

1

배열과 함께 간단한 스택을 만들 수 있습니다.

class Doc { 
    private $stack = []; 

    public function readDoc($file, $recursion=false) { 
      if($recursion != false)  
       DO SOMETHING 

      $this->stack[] = $file;  
      $filename = $file."Some added text"; 
      $this->readDoc($filename, 1); 
    } 
} 

그런 다음 배열의 첫 번째 색인을 $ file 변수로 가져옵니다.

public function test($file, $recursion = false) 
{ 
    $rec = function($r) use ($file, &$rec) 
    { 
     if($r !== false) { 

     } 

     $filename = $file.'test'; 
     return $rec($r); 
    }; 

    return $rec($recursion); 
} 

은 $ 파일 변수가 항상 같은 (위의 예는 무한을 생성하는 인식을 유지,이 경우 :

0

당신은 또한이 같은 다른 범위 뭔가 일 익명 함수를 사용할 수 있습니다 -loop)

관련 문제