我的特定场景涉及在私有(private)方法中使用正则表达式进行一些文本转换。私有(private)方法调用 preg_replace_callback,但似乎回调需要在对象上公开,所以我坚持要打破私有(private)世界并在我不愿意的时候公开实现细节。
所以,简而言之:我可以在不丢失封装的情况下使用实例方法作为回调吗?
谢谢。
最佳答案
是的,看来你可以:
<?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;
所以看起来 preg_replace_callback()
,或者 PHP 的回调机制,知道它被调用的范围。
在 5.2.8 上测试
关于php - 我可以使用私有(private)实例方法作为回调吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1028035/