PHP - копирование классов с помощью клона - это ошибка или я делаю это неправильно? - PullRequest
2 голосов
/ 18 февраля 2012

Пожалуйста, объясните мне, почему этот код:

<code>    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 '
';эхо '--------------------------«;echo '
';
            print_r($output2);
            echo '
';}}

Дает мне такие данные:

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, и это не сработало.Наконец я сделал еще один массив, и я использую оба для отладки.

Это выглядит странно.Я не понимаю, почему клонированный объект в массиве перезаписывается после следующей выборки строк.Предполагается, что это копия его клона, верно?

1 Ответ

0 голосов
/ 19 февраля 2012

Я нашел ответ в справке PHP. Мне пришлось создать «глубокую копию», как это:

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

Поскольку (как мне кажется) справка гласит: «Любые свойства, являющиеся ссылками на другие переменные, останутся ссылками».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...