如何在 PHP 中的 class 方法的私有函数中访问 self::?

How to access self:: in private function of class method in PHP?

下面是给定的静态方法class:

class myClass {
  public static function contentFilter($content) {
    // ... irrelevant code
    if (!function_exists('replaceCallback')) {
        function replaceCallback($matches) {
            // relevant line of code 
            $result = return_setting($params);
            return $result;
        };
    }
    $new_content = preg_replace_callback($regex, 'replaceCallback', $new_content);
    return $new_content;
  }
}

replaceCallback 中的函数 return_setting 是来自同一 class 的静态 returnSetting 方法的全球化版本。代码可以工作,但是我觉得我必须先全球化这个功能才能访问它是不对的,我觉得我应该可以做到 self::returnSetting()。当我这样做时,我得到了错误 ofc。

Fatal error: Cannot access self:: when no class scope is active

执行 myClass::returnSetting 是可行的,但是在其中一种方法中通过其名称来引用 class 有点尴尬。或者可以在 replace_callback 函数中执行 self::replaceCallback 吗?有什么首选方法可以做到这一点吗?

PS:我需要将replaceCallback函数作为字符串传递给preg_replace_callback,因为我需要支持PHP 5.2.

无论在何处声明,函数始终具有全局作用域,即使 replaceCallbackmyClass 中声明,其作用域始终是全局作用域(即它没有 class 范围,self:: 引用不起作用)

所以你需要像在 class

之外那样做 myClass::functionName()

"All functions and classes in PHP have the global scope - they can be called outside a function even if they were defined inside and vice versa." doc

我采用的解决方案(源自此处先前发布的已被其作者删除的答案)如下:

我将 replaceCallback 函数设为 class 的私有成员,这样我就可以直接在其中执行 self::returnSetting()。为了兼容性,我将 replaceCallback 函数作为 array('self','replaceCallback').

传递给了 preg_replace_callback
class myClass {
  private static function replaceCallback($match) {
    $output = self::returnSetting('param');
    // bunch of other stuff
    return $output;
  }
  public static function contentFilter($content) {
    // ... irrelevant code
    $new_content = preg_replace_callback($regex, array('self','replaceCallback'), $new_content);
    return $new_content;
  }
}