2012-02-18 48 views
2

請解釋一下我爲什麼代碼:PHP - 通過克隆複製類 - 是這個錯誤或即時做錯了嗎?

class kategoria 
    { 
     public $IdKat; 
     public $NazwaKat; 
     public $OpisKat; 
    } 

    class dbClass 
    { 
     private $link; 

     private $user = USER; 
     private $pass = PASS; 
     private $database = DATABASE; 



     function __construct() 
     { 
      try 
      { 
       $this->link = new mysqli('localhost', $this->user, $this->pass, $this->database); 
       $this->link->set_charset('utf8'); 
      ; 
      } 
      catch(Exception $exc) 
      { 
       echo $e; 
      } 
     } 


     function get_cats() 
     { 

      $query = "SELECT IdKat, NazwaKat, OpisKat FROM `kategorie`"; 

      try 
      { 
       $stmt = $this->link->prepare($query); 

       /* bind parameters for markers */ 
       //$stmt->bind_param("i", $IdKat); 

       $stmt->execute(); 
       $kat = new kategoria(); 

       $stmt->bind_result(
         $kat->IdKat, 
         $kat->NazwaKat, 
         $kat->OpisKat 
         ); 


       $output = array(); 
       $output2 = array(); 

       while ($stmt->fetch()) { 

        array_push($output, $kat->IdKat); 
        array_push($output2, $kat); 
        // array_push($output2, clone $kat); // i tried cloning like this 
        // $output2 += array(clone($kat)); // tried adding 
       } 

       $stmt->close(); 
      } 
      catch (Exception $e) 
      { 
       echo $e; 
      } 

      echo '<pre>'; 
      print_r($output); 
      echo '</pre>'; 
      echo '--------------------------<br/>'; 

      echo '<pre>'; 
      print_r($output2); 
      echo '</pre>'; 
     } 

    } 

使我的數據是這樣的:

Array (
    [0] => 2 
    [1] => 3 
    [2] => 4) 

-------------------------- 

Array (
[0] => kategoria Object 
    (
     [IdKat] => 4 
     [NazwaKat] => Hi-Fi 
     [OpisKat] => Music equipment 
    ) 

[1] => kategoria Object 
    (
     [IdKat] => 4 
     [NazwaKat] => Hi-Fi 
     [OpisKat] => Music equipment 
    ) 

[2] => kategoria Object 
    (
     [IdKat] => 4 
     [NazwaKat] => Hi-Fi 
     [OpisKat] => Music equipment 
    ) 

) 

這是我關於它的第二個問題。我嘗試添加數組,克隆對象$ kat,但它沒有奏效。最後我做了另一個數組,並使用兩者進行調試。

它看起來很奇怪。我不明白爲什麼在數組中克隆的對象在下一行讀取後被覆蓋。它應該是他克隆的副本,對吧?

+0

這裏最大的問題是爲什麼使用bind_result,而您可以通過使用fetch_object創建單個對象。 – 2012-07-10 12:54:47

+0

也許這是錯誤的做法,我沒有經歷過MySQL/PHP編程。我試圖用更「現代」的方法。我已閱讀關於MySQL幫助中的綁定結果。 – Kamil 2012-07-11 15:32:41

回答

0

我在PHP幫助中找到答案。我要創建「深層複製」這樣的:

$clone = unserialize(serialize($object)); 

因爲(我相信)求助說:「任何性質對其他變量的引用,將繼續引用。」