gpt4 book ai didi

php - 如何在 PHP 中访问类方法的私有(private)函数中的 self::in?

转载 作者:行者123 更新时间:2023-12-05 06:44:24 24 4
gpt4 key购买 nike

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

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。

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

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

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

最佳答案

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

我将 replaceCallback 函数设为该类的私有(private)成员,这样我就可以直接在其中执行 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;
}
}

关于php - 如何在 PHP 中访问类方法的私有(private)函数中的 self::in?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29286238/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com