2015-02-06 29 views
0
class Field extends Thread{ 
     public $dataFields; 

     public function addValue($table,$key,$data){ 
      print_r($this->dataFields[$table]); 
      echo "\ndata: ".$data."\n"; 
      if(isset($this->dataFields[$table][$key])){ 
       $this->dataFields[$table][$key]= $data; 
       echo "yes\n"; 
      } 
      else echo "no\n"; 
      print_r($this->dataFields[$table]); 

     } 

     public function setVariables($con){ 
      $result = mysqli_query($con,"select * from property,city limit 1"); 
      $row=mysqli_fetch_fields($result); 
      foreach ($row as $key => $value) { 
       $propData[$value->table][$value->name]=""; 
      } 
      $propData["property"]["portalId"]=2; 
      $propData["property"]["area"]="delhi"; 
      $this->dataFields=$propData; 
      $this->addValue("property","id","1"); 
      //print_r($this->dataFields); 
      $this->dataFields["property"]["id"]=1; 
      var_dump($propData); 
      var_dump($this->dataFields); 
     } 
    } 

,你可以看到我通過功能的addValue更新數組值的代碼,如果密鑰的數據域數組中的設置,那麼它會被更新,但在更新的PHP類數組值當我嘗試調用該函數時,這不會發生:如何同時使用並行線程

addValue(「property」,「id」,「1」);通過函數setVariables() (參見下面的輸出)

它打印$ data的值,它打印「yes」。 類變量dataFields沒有得到更新。

[編輯] 當我使用線程擴展類時,它不會被更新,但是當我不使用線程擴展類時,它會被更新。

Array         
    (            
     [id] =>         
     [portalId] => 2       
     [area] => delhi       
    )            

    data: 1         
    yes           
    Array           
    (            
     [id] =>         
     [portalId] => 2       
     [area] => delhi 
    ) 
    array(2) {       
     ["city"]=>        
     array(3) {        
      ["id"]=>        
      string(0) ""       
      ["name"]=>        
      string(0) ""       
      ["otherNames"]=>      
      string(0) ""       
     }                 
     ["property"]=>       
     array(3) {        
      ["id"]=>        
      string(0) ""       
      ["portalId"]=>       
      int(2)         
      ["area"]=>        
      string(5) "delhi"      
     } 
     } 
    array(2) { 
      ["city"]=> 
      array(3) { 
      ["id"]=> 
      string(0) "" 
      ["name"]=> 
      string(0) "" 
      ["otherNames"]=> 
      string(0) "" 
      } 
      ["property"]=> 
      array(3) { 
      ["id"]=> 
      string(0) "" 
      ["portalId"]=> 
      int(2) 
      ["area"]=> 
      string(5) "delhi" 
      } 
     } 
+0

請向我們展示您的輸入,準確輸出和您的預期輸出。 (適用於我)同時向我們展示您的**完整**代碼 – Rizier123 2015-02-06 23:22:00

+0

爲什麼輸出:'data:DEFAULT'而不是'data:1'?請向我們展示完整代碼 – Rizier123 2015-02-06 23:35:52

+0

對不起,我複製了不同測試用例的輸出,我現在已經更正了它! – 2015-02-06 23:38:43

回答

0

我可以確認我下面的作品5.6.3:

class Field { 
    public $dataFields; 

    public function addValue($table,$key,$data){ 
     print_r($this->dataFields[$table]); 
     echo "\ndata: ".$data."\n"; 
     if(isset($this->dataFields[$table][$key])){ 
      $this->dataFields[$table][$key]= $data; 
      echo "yes\n"; 
     } 
     else echo "no\n"; 
     print_r($this->dataFields[$table]); 

    } 

    public function setVariables(){ 
     $propData["property"]["id"] = ''; 
     $propData["property"]["portalId"]=2; 
     $propData["property"]["area"]="delhi"; 
     $this->dataFields=$propData; 
     $this->addValue("property","id","1"); 
     //print_r($this->dataFields); 
    } 
} 

$field = new Field; 
$field->setVariables(); 

與輸出:

Array 
(
    [id] => 
    [portalId] => 2 
    [area] => delhi 
) 

data: 1 
yes 
Array 
(
    [id] => 1 
    [portalId] => 2 
    [area] => delhi 
) 

我會建議重新安裝最新版本的PHP。

+0

這doesn不幫助OP或任何人,這不是一個答案。你可以在OP的問題下發表評論。每個人都可以說:它適用於我,我們將在這裏有200個答案! – Rizier123 2015-02-07 00:22:20

+0

是的,這也適用於我!我不明白:/ – 2015-02-07 00:23:09

+0

我使用php5.5。12 – 2015-02-07 00:24:08

相關問題