在PHP中访问匿名函数中对象的私有/受保护属性

Wag*_*age 5 php oop anonymous-function

我试图通过匿名函数转储对象的私有属性的元素 - 当然我可以通过许多其他方式实现这一点,但这突出了一个PHP难题,我无法解决我的头脑,缺乏$ foo = $ this和使用$ foo - 但这不会给我私人的东西,所以...建议?

示例代码:

class MyClass
{
    private $payload = Array( 'a' => 'A element', 'b' => 'B element');

    static $csvOrder = Array('b','a');

    public function toCSV(){
        $values = array_map(
            function($name) use ($this) { return $this->payload[$name]; },  
            self::$csvOrder
        );
        return implode(',',$values);
    }
}

$mc = new MyClass();
print $mc->toCSV();
Run Code Online (Sandbox Code Playgroud)

Jon*_*Jon 3

我相信绝对没有办法直接按照你的建议去做。

但是,您可以通过将匿名方法设置为类方法(这不是您所要求的,但它可能是一个实用的解决方案)或$this显式提取您需要的所有内容并将提取的值传递到函数中来解决此问题:

class MyClass
{
    private $payload = Array( 'a' => 'A element', 'b' => 'B element');

    static $csvOrder = Array('b','a');

    public function toCSV(){
        $payload = $this->payload;
        $values = array_map(
            function($name) use ($payload) { return $payload[$name]; },  
            self::$csvOrder
        );
        return implode(',',$values);
    }
}
Run Code Online (Sandbox Code Playgroud)