Да, кажется, вы можете:
<?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