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


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

以下是给定类的静态方法:

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函数是同一类中的静态returnSetting方法的全球化版本。代码有效,但感觉不对,我必须先全球化函数才能访问它,我觉得我应该能够做self::returnSetting().当我这样做时,我得到错误ofc。

致命错误:无法访问 self:: 当没有类范围处于活动状态时

myClass::returnSetting工作,但是在其中一个方法中通过类的名称引用该类有点尴尬。或者可以在replace_callback功能中做self::replaceCallback?有没有首选的方法可以做到这一点?

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

我采用的解决方案(来自之前发布的答案,该答案已被其作者删除(如下:

我使replaceCallback函数成为类的私有成员,以便我可以直接在其中执行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;
  }
}
无论

在哪里声明函数,它总是有一个全局作用域,即使replaceCallback myClass声明,它的作用域将始终是全局的(即它没有类作用域,self::引用不起作用(

所以你需要像课外一样做myClass::functionName()

"PHP 中的所有函数和类都具有全局范围 - 它们可以在函数外部调用,即使它们是在函数内部定义的,反之亦然。.doc