Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 类变量中传递的回调在var_dump上为空_Php_Multithreading_Callback_Pthreads - Fatal编程技术网

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没有,没有错误在运行我的示例后,它似乎可以工作,但在实际代码中却不行。我必须探究原因…我不确定这是否重要,但我使用线程,回调和类初始化运行在同一个线程上,这似乎与继承有关。