2009-06-08 10 views
1

정규식에 관해 묻는 또 다른 질문에 대한 응답으로 preg_replace_callback 함수 (PHP regex templating - find all occurrences of {{var}})를 내 문제의 해결책으로 사용했다고 들었습니다. 이 훌륭한 작동하지만 지금은 콜백 함수의 변수 범위 관련 질문이 있습니다.PHP 콜백 함수의 가변 범위

텍스트를 구문 분석하는 함수는 클래스의 일부이지만 사용하려는 데이터는 함수에 로컬로 저장됩니다. 그러나 콜백 함수에서이 데이터에 액세스 할 수 없다는 것을 발견했습니다.

  • 콜백을 구현 콜백 매개 변수로 (작동하지 않는, PHP는이 치명적인 오류) '$this->callback_function'을 통과

    • 개인 수준의 함수로 콜백을 구현 : 여기에 지금까지 시도했던 방법이 있습니다 그것을 사용하는 함수 내에서 (아래 예 참조) 그러나 이것은 바람직 전역을 사용하지 않고 내가, 내 콜백 함수 내에서 $newData에 액세스 할 수있는 방법에 관한 callback_function

    내부 중 하나 $newData 때문에이 범위에없는 어떤 아이디어를 작동하지 않았다 ?
    많은 감사.

    public function parseText($newData) { 
        ... 
        function callback_function($matches) { 
        ... //something that uses $newData here 
        } 
        ... 
        preg_replace_callback('...', 'callback_function', $textToReplace); 
    } 
    
  • 답변

    2
    • (PHP 치명적인 오류가 작동하지 않습니다) '> $ this- callback_function'를 전달

    preg_replace_callback을 콜백 매개 변수로를 개인 수준의 함수로 콜백을 구현 ('...', 'callback_function', $ textToReplace); callback_function이 클래스의 private 메소드 동안

    preg_replace_callback ('...', array($this, 'callback_function'), $textToReplace);로 전화를 변경

    .

    <?php 
    
    class PregMatchTest 
    { 
    
        private callback_function ($matches) 
        { 
         // ...... 
        } 
    
        public function parseText ($newData) 
        { 
         // .... 
    
         preg_replace_callback('...', array($this, 'callback_function'), $textToReplace); 
        } 
    
    } 
    
    ?> 
    
    +0

    안녕하세요, 감사합니다. –

    -2

    는 어쩌면 단지 에 설정, 전역을 사용하지 않고는 가능하다고 생각하지 않습니다 (필자는 글 머리 기호 후 넣을 때 제대로 포맷하지 않음) 두 번째 시도 아래

    예 $ _GLOBALS 어레이 및 원하는 경우을 설정 해제하십시오.