1
  class Test extends thread {
     function __construct(&$db,$userObj) {  
     $this -> userObj = $userObj;
     print "Original:";
     var_dump($db);
     $this->db = $db;
     print "InThread:";
     var_dump($this->db);      
     // as value of $this->db and db(in constructor) is different I am gettting different values. 
  }
 public function run(){
  $userId = $this->userObj->getUserId();
  $data = $this->db->getData();
 // as value of $this->db and db(in constructor) is different I am getting different values. 
  }

 function getData(&$db,$userObj){
  $thread = new Test($db,$userObj);
  $thread->start();
  }

run 関数で db の値を使用したいと考えています。$db 値を変更せずに run() 経由でスレッド コンストラクター変数にアクセスする方法。

4

1 に答える 1

0

Threadedそれ自体ではないオブジェクトのメンバー プロパティとして設定されたオブジェクトはThreaded、書き込み時に自動的にシリアル化され、読み取り時に自動的にシリアル化解除されます。

PHP のアーキテクチャ上、Threadedメンバ プロパティにアクセスした場合、pthreads他で作成されたオブジェクトの返還を禁止する必要があります (共有なし)。Threads

プロパティ自体が である場合、Threadedこれは (PHP7 で) 効率的に管理されますが、それでも同じ物理オブジェクトを取得することはできません。

$this->dbこれが、と$dbが異なるオブジェクトである理由です。

参照渡しを試みても違いはありません。Threadedオブジェクトはメンバー プロパティへの参照をサポートしていません。

于 2016-10-06T06:15:20.133 に答える