如何在使用 PTHREADS 时更新 PHP 类数组值


how to update the php class array values while using pthreads

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更新数组的值的代码,如果在dataFields数组中设置了键,那么它将得到更新,但是当我尝试调用函数时,它不会发生:

addValue("property","id","1"(; 通过函数 setVariables(((见下面的输出(

它打印的值$data打印"是"。类变量 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"
           }
        }

我可以在 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。