koe*_*oen 3 php object callback
我想知道为什么这样有效:
class Foo {
public function doSomethingFunny($subject) {
preg_replace_callback(
"#pattern#",
array($this, 'doX'),
$subject
);
}
private function doX() {
echo 'why does this work?';
}
}
Run Code Online (Sandbox Code Playgroud)
为什么回调仍然在$ this的上下文中?我希望它只允许公共方法.我错过了回调如何工作的基本内容.
preg_replace_callback()中的回调参数允许调用方法,并允许传递数组以告诉方法回调的上下文.它不仅是$ this,还包括任何对象变量.
$foo = new Foo();
preg_replace_callback(
"#pattern#",
array($foo, 'bar'),
$subject
);
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,如果Foo :: bar()是私有的,那将无效.但是,在您的原始情况下,仍然会触发私有方法,因为使用了与私有方法相同的$ this.