2009-06-08 162 views
1

在回答另一个关于正则表达式的问题时,我被告知使用preg_replace_callback函数(PHP regex templating - find all occurrences of {{var}})作为解决我的问题的方法。这很好,但现在我有一个问题涉及回调函数中的变量范围。PHP回调函数的变量范围

解析文本的函数是类的一部分,但是我想要使用的数据本地存储在函数中。但是,我发现我不能从我的回调函数中访问这些数据。这里是我迄今为止尝试过的方式:

  • 实现回调的私有类函数,传递'$this->callback_function'作为回调参数(不工作,PHP有一个致命错误)
  • 实现回调使用它的函数内(见下面的例子),但是这并没有工作,要么因为$newData不在范围内的内部callback_function

任何想法,我怎么能访问$newData我的回调函数内,最好不使用全局变量?
非常感谢。

示例下面的第二次尝试(当我把它的子弹点之后不能正常格式化)

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

回答

2
  • 实现回调的私有类函数,传递'$这个 - > CALLBACK_FUNCTION'作为回调参数(不工作,PHP有一个致命错误)

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

嘿,谢谢,那正是我以前的样子。 – 2009-06-08 01:17:23

-2

我不认为这是可能的,而无需使用全局变量,也许只是设置在$ _GLOBALS array和然后取消设置如果你愿意。