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
});
}
我有一个 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
});
}