2012-02-18 3 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 
    ) 

) 

これはそれについての私の2番目の質問です。私は配列を追加しようとしました、オブジェクト$ katをクローンし、それは働かなかった。最後に私は別の配列を作成し、デバッグには両方とも使用しています。

奇妙に見えます。私はなぜ配列のクローンオブジェクトが次の行のフェッチ後に上書きされるのか分からない。彼のクローンのコピーであると思われますね。

+0

ここで大きな問題は、fetch_objectを使用して個々のオブジェクトを作成するだけで、bind_resultを使用することです。 –

+0

これは間違ったアプローチですが、MySQL/PHPプログラミングで経験したことはありません。私はもっ​​と "近代的な"方法を使用しようとしました。私はMySQLのヘルプでバインディングの結果について読んだことがあります。 – Kamil

答えて

0

PHPヘルプで回答が見つかりました。私はこのような「ディープコピー」を作成する必要がありました:

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

ので(私は信じている)の助けは言う:「他の変数への参照されているすべてのプロパティは、参照が残ります。」

関連する問題