php多线程自定义类中变量的问题!!!太费解了!!!

hua_zhixing_ 2014-10-21 06:00:14

代码如下,class A中的变量$dat为什么在同一个类里不同函数没效果?如何才能做到对$dat在不同函数里能任意修改?谢谢!

<?php

class A
{
var $dat;
public function __construct()
{
$this->dat = 0;
echo "class A construct: \n";
var_dump($this->dat);
}
public function add()
{
$this->dat++;
echo "class A add: \n";
var_dump($this->dat);
}
public function get()
{
return $this->dat;
echo "class A get: \n";
var_dump($this->dat);
}

}
class workerThread extends Thread {
var $data = 0;
var $datc;
public function __construct($i){
$this->i=$i;
$this->datc = new A();
echo "thread construct: \n";
var_dump($this->datc);
}

public function opp()
{
$this->data ++;
$this->datc->add();
}

public function set()
{
$this->data = 8;
}

public function show()
{
echo "thread show: \n";
var_dump($this->datc);
var_dump($this->data);
var_dump($this->datc->get());
}

public function run(){
$this->opp();
$this->show();
}
}

$workers=new workerThread(6);
$workers->set();
$workers->start();

?>
...全文
484 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuzuning 2014-10-22
  • 打赏
  • 举报
回复
按单例模式设计 A 类
hua_zhixing_ 2014-10-22
  • 打赏
  • 举报
回复
引用 2 楼 qq_17167577 的回复:

class A extends Stackable
{
    ...
如果类A中的变量是数组的话,还是存在同样的问题,构造函数里设的什么值就什么值,其它函数不能修改,为什么?
事故的故事 2014-10-22
  • 打赏
  • 举报
回复
static
晓敬 2014-10-22
  • 打赏
  • 举报
回复
static 或者 &传引用 你们怎么看
qq_17167577 2014-10-22
  • 打赏
  • 举报
回复

<?php
class A extends Stackable
{
    var $dat;
    public function __construct($dat)
    {
        $this->dat = $dat;
        $this->dat->a = 0;
        echo "class A construct: \n";
        var_dump($this->dat);
    }
    public function add()
    {
        $this->dat->a++;
        echo "class A add: \n";
        var_dump($this->dat);
    }
    public function get()
    {
        echo "class A get: \n";
        var_dump($this->dat);
        return $this->dat;
    }
 
}
class workerThread extends Thread {
    var $data = 0;
    var $datc;
    public function __construct($i, $A){
        $this->i=$i;
        $this->datc = $A;
        echo "thread construct: \n";
        var_dump($this->datc);
    }
 
    public function opp()
    {
        $this->data ++;
        $this->datc->add();
    }
 
    public function set()
    {
        $this->data = 8;
    }
 
    public function show()
    {
        echo "thread show: \n";
        var_dump($this->datc);
        var_dump($this->data);
        var_dump($this->datc->get());
    }
 
    public function run(){
        $this->opp();
        $this->show();
    }
}

// 1、只有Stackable对象才能在线程中传递 2、并且线程间被传递的对象一定要在全局有引用
$dat = new Stackable();
$A = new A($dat);
$workers=new workerThread(6, $A);
$workers->set();
$workers->start();

傲雪星枫 2014-10-21
  • 打赏
  • 举报
回复
多线程共享变量吗?
qq_17167577 2014-10-21
  • 打赏
  • 举报
回复

class A extends Stackable
{
    ...
智商众筹 2014-10-21
  • 打赏
  • 举报
回复
没看懂问题,但我隐隐觉得static这个词会派上用场...

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧