$ this在回调函数中

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的上下文中?我希望它只允许公共方法.我错过了回调如何工作的基本内容.

Mik*_*ynn 5

preg_replace_callback()中的回调参数允许调用方法,并允许传递数组以告诉方法回调的上下文.它不仅是$ this,还包括任何对象变量.

$foo = new Foo();
preg_replace_callback(
    "#pattern#",
    array($foo, 'bar'),
    $subject
);
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,如果Foo :: bar()是私有的,那将无效.但是,在您的原始情况下,仍然会触发私有方法,因为使用了与私有方法相同的$ this.