我注意到我无法在父线程的子线程中使用创建的对象。
比方说,在扩展“线程”的类的同步函数中,我创建了一个对象和一个属性:
$this->hit = true;
$this->synchronized
(
function ()
{
$this->obj = new stdClass;
$this->obj->result = "you have a result in an object.";
$this->result = "you have a result in a property."
$this->wait();
$this->hit = false;
}
);
...然后我尝试在父线程的同步函数的另一端获取它:
if ($job->hit)
{
$job->synchronized
(
function ($job)
{
$job->notify();
echo $job->obj->result . "^^^Getting object created in child thread doesn't work for some reasons^^^.\n\n";
echo $job->result . ", and that's ok.\n";
},
$job
);
}
以下内容会抱怨:
PHP注意:尝试获取非对象的属性 第71行的/srv/cordmon/src/SleepThread.php ^^^由于某些原因,无法在子线程中创建对象^^^。
您在一个属性中有一个结果,没关系。
我进行了几次尝试,为简洁起见,在此不再列出,但是似乎无法从我的子线程中将对象移到父线程中。其他数据类型不会出现此问题,因此我想我可以在实际使用中从数组中获得所需的信息。
仍然,我想知道为什么会这样,以及是否有正确的方法来做我要尝试的事情。我知道线程不在主作用域内,并且我知道匿名函数也有其自己的作用域,但是我认为必须有一种方法(例如,使用json_encode / _decode或类似的解决方法除外)。
谢谢。