2009-06-08 20 views
1

正規表現について質問した別の質問に対して、preg_replace_callback関数(PHP regex templating - find all occurrences of {{var}})を問題の解決策として使用するように指示されました。これはうまく動作しますが、コールバック関数の変数スコープに関する質問があります。PHPコールバック関数の可変スコープ

テキストを解析する関数はクラスの一部ですが、使用するデータは関数内にローカルに格納されます。しかし、私は私のコールバック関数内からこのデータにアクセスすることができないことがわかりました。ここで私はこれまで試してみました方法があります。

  • は、コールバックを実装
  • (PHPは致命的なエラーを持っている、動作しない)コールバックパラメータとして'$this->callback_function'を渡し、プライベートクラスの関数としてコールバックを実装します私は、好ましくは、グローバルを使用せずに、私のコールバック関数内$newDataにアクセスすることができますどのようにようにそれを使用する関数の内部(以下の例を参照)が、これは動作しませんでしたどちらか$newDatacallback_function

内の範囲ではないので、任意のアイデア?
多くのありがとうございます。

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);

preg_replace_callback ('...', array($this, 'callback_function'), $textToReplace);に電話を変更し、callback_functionはクラス内のプライベートメソッドです。

<?php 

class PregMatchTest 
{ 

    private callback_function ($matches) 
    { 
     // ...... 
    } 

    public function parseText ($newData) 
    { 
     // .... 

     preg_replace_callback('...', array($this, 'callback_function'), $textToReplace); 
    } 

} 

?> 
+0

こんにちは、これは私が後にしたものです。 –

-2

は、私は多分ちょうどにそれを設定し、グローバルを使用せずに、それが可能だとは思わない(私は箇条書きの後にそれを置くとき、適切にフォーマットしていない)第二の試みについては、以下の

例$ _GLOBALS配列と希望する場合はを設定しないでください。

関連する問題