是否可以使用私有实例方法作为回调?
2022-08-30 23:28:22
我的特定方案涉及在私有方法中使用正则表达式执行一些文本转换。私有方法调用preg_replace_callback,但似乎回调需要在对象上是公共的,所以我被困在打破私有世界并公开实现细节时,我宁愿不这样做。
那么,简而言之:我能否在不丢失封装的情况下使用实例方法作为回调?
谢谢。
我的特定方案涉及在私有方法中使用正则表达式执行一些文本转换。私有方法调用preg_replace_callback,但似乎回调需要在对象上是公共的,所以我被困在打破私有世界并公开实现细节时,我宁愿不这样做。
那么,简而言之:我能否在不丢失封装的情况下使用实例方法作为回调?
谢谢。
是的,您似乎可以:
<?php
//this works
class a {
private function replaceCallback($m) { return 'replaced'; }
public function test() {
$str = " test test ";
$result = preg_replace_callback('/test/', array($this, 'replaceCallback'), $str);
echo $result;
}
}
$a = new a();
$a->test();
//this doesn't work
$result = preg_replace_callback('/test/', array(new a(), 'replaceCallback'), ' test test ');
echo $result;
因此,似乎,或者PHP的回调机制,知道它被调用的范围。preg_replace_callback()
测试于 5.2.8
是否可以为文本处理创建一个单独的帮助器类,并在该类中创建回调方法(它可以在那里公开)?如果需要访问特定的实例数据,则可以传入对原始类(对象)的引用。
主类的公共接口保持一致和干净,并且您将特定的字符串处理从它可能不属于的类中拉出...