代码之家  ›  专栏  ›  技术社区  ›  a_m0d

PHP回调函数的变量范围

  •  1
  • a_m0d  · 技术社区  · 15 年前

    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 回复  |  直到 7 年前
        1
  •  2
  •   Community c0D3l0g1c    4 年前
    • 将回调实现为私有类函数,传递 “$this->回调函数' 作为回调参数(不起作用,php有一个致命错误)

    preg_replace_callback(“…”、“callback_函数”、$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 );
        }
        
    }
    
    ?>
    
        2
  •  -2
  •   Daniel Sorichetti    15 年前

    我认为不使用globals是不可能的,也许把它设置在 $\全球 然后解除它 如果你愿意的话。