【问题标题】:PHP - copying classes by clone - is this bugged or im doing it wrong?PHP - 通过克隆复制类 - 这是错误的还是我做错了?
【发布时间】:2012-03-09 12:40:27
【问题描述】:

请解释为什么该代码:

    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 并没有奏效。最后,我制作了另一个数组,并使用它们进行调试。

看起来很奇怪。我不明白为什么在读取下一行后会覆盖数组中的克隆对象。应该是他的复制品吧?

【问题讨论】:

  • 这里最大的问题是为什么要使用 bind_result 而您可以使用 fetch_object 创建单个对象。
  • 也许这是错误的方法,我在 MySQL/PHP 编程方面没有经验。我尝试使用更“现代”的方法。我在 MySQL 帮助中阅读了有关绑定结果的信息。

标签: php object binding mysqli


【解决方案1】:

我在 PHP 帮助中找到了答案。我不得不像这样创建“深拷贝”:

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

因为(我相信)help 说:“任何引用其他变量的属性都将保持引用。”

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-28
    • 1970-01-01
    • 2013-06-03
    相关资源
    最近更新 更多