PHP回调函数的可变范围

时间:2009-06-08 01:03:16

标签: php oop callback scope

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

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

  • 将回调实现为私有类函数,将'$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 个答案:

答案 0 :(得分:2)

  
      
  • 将回调实现为私有类函数,将'$ this-> 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 );
    }

}

?>

答案 1 :(得分:-2)

我认为没有使用全局变量是可能的,也许只需将它设置在 $ _ GLOBALS 数组上,如果你愿意,可以将设置为