Php 类变量中传递的回调在var_dump上为空
我有一个类似于这个分条版本的类:Php 类变量中传递的回调在var_dump上为空,php,multithreading,callback,pthreads,Php,Multithreading,Callback,Pthreads,我有一个类似于这个分条版本的类: abstract class MainClass extends Thread{ protected $events = []; public function on($message, callable $callback){ $this->events[$message] = $callback; } } class MyClass extends MainClass{ // has some ran
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
}
然后我运行它,它创建一个类的实例,然后它运行一个回调,在传入的类中运行该方法
$myClass = new MyClass();
call_user_func_array("myCallback", array($myClass));
var_dump($myClass);
function myCallback($class){
$class->on("message", function(){
// Do some stuff
});
}
在类上执行var_转储时,MyClass::$var
数组为空。为什么呢
编辑
如果我不扩展
线程
类,这是可行的。为什么Thread类不允许我编辑我的属性?我可以通过使用可堆叠的对象来实现这一点。我发现,数组不是线程安全的,因此为了完成任务,我做了以下工作:
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
});
}
你有什么错误吗?@taxicala没有,没有错误在运行我的示例后,它似乎可以工作,但在实际代码中却不行。我必须探究原因…我不确定这是否重要,但我使用线程,回调和类初始化运行在同一个线程上,这似乎与继承有关。