【发布时间】:2015-03-26 18:32:46
【问题描述】:
以下是给定类的静态方法:
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()。当我这样做时,我得到了 c 的错误。
致命错误:无法访问 self:: 当没有活动的类范围时
执行myClass::returnSetting 是可行的,但是在其中一个方法中通过其名称来引用该类有点尴尬。或者可以在 replace_callback 函数中执行self::replaceCallback 吗?有什么首选的方法吗?
PS:我需要将replaceCallback 函数作为字符串传递给preg_replace_callback,因为我需要支持PHP 5.2。
【问题讨论】:
-
函数
replaceCallback,即您在contentFilter中定义的函数,无论如何都不是myClass类的成员。无论如何,您不能使用self,因为该方法不是在类本身内部而是在其外部调用的。这就是为什么self不可访问,它将在 preg_replace 完成时通过call_user_function调用 -
我知道,显然我还不够清楚。问题不是
replaceCallback,问题是myClass::returnSetting应该在replaceCallback里面执行,怎么办?