如何在 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.
无论在何处声明,函数始终具有全局作用域,即使 replaceCallback
在 myClass
中声明,其作用域始终是全局作用域(即它没有 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;
}
}
下面是给定的静态方法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.
无论在何处声明,函数始终具有全局作用域,即使 replaceCallback
在 myClass
中声明,其作用域始终是全局作用域(即它没有 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;
}
}