class 中传递的回调变量在 var_dump 上为空

Callback passed in class variables are empty on var_dump

我有一个 class 类似于这个精简版:

abstract class MainClass extends Thread{
    protected $events = [];

    public function on($message, callable $callback){
        $this->events[$message] = $callback;
    }
}

class MyClass extends MainClass{
    // has some random methods
}

然后我 运行 创建 class 的实例,然后 运行 是一个回调,运行 是传入 [=27] 中的方法=].

$myClass = new MyClass();
call_user_func_array("myCallback", array($myClass));
var_dump($myClass);

function myCallback($class){
    $class->on("message", function(){
        // Do some stuff
    });
}

当我在 class 上执行 var_dump 时,MyClass::$var 数组为空。这是为什么?

编辑

如果我不扩展 Thread class,这有效。为什么线程 class 不允许我编辑我的属性?

我能够通过使用 Stackable 对象来实现它。我发现,数组不是线程安全的,所以为了完成我这样做的任务:

class Events extends Stackable{

    public function add($message, callable $callback){
        $this[$message] = $callback;
    }

}

abstract class MainClass extends Thread{

    protected $events;

    public function __construct(Events $events){
        $this->events = $events;
    }

    public function on($message, callable $callback){
        $this->events->add($message, $callback);
    }

}

class MyClass extends MainClass{
    // has some random methods
}

$evts    = new Events();
$myClass = new MyClass($evts);
call_user_func_array("myCallback", array($myClass));
var_dump($myClass);

function myCallback($class){
    $class->on("My Message", function(){
        // Do some stuff
    });
}