PHP不通过引用传递时通过引用更新

时间:2014-09-24 15:35:40

标签: php

当我将数据从一个函数传递给一个类时,我有一个问题是它正在更新我在原始类中传递的数据,即使我没有通过引用这样做。

<?php
namespace core\Test\Libraries;

    public function hasPurchasedCorrectProducts()
    {
        $testData = [];
        $testData['one'] = new \stdClass();
        $testData['one']->qty = 2;

        (new \core\Libraries\Debug())->printData($testData, false); // see below #1

        (new StupidTest())->test($testData);

        (new \core\Libraries\Debug())->printData($testData, false);exit; // see below #3
    }
}


<?php
namespace core\Test\Libraries;

    class StupidTest
    {
        private $availableProducts;

        public function test($availableProducts)
        {
            $this->availableProducts = $availableProducts;
            $this->availableProducts['one']->qty = ($this->availableProducts['one']->qty - 1)
;
            (new \core\Libraries\Debug())->printData($this->availableProducts, false); // see below #2
        }
   }

1

Array
(
    [one] => stdClass Object
        (
            [qty] => 2
        )

)

2

Array
(
    [one] => stdClass Object
        (
            [qty] => 1
        )

)

3

Array
(
    [one] => stdClass Object
        (
            [qty] => 1
        )

)

#3中的$ testData如何更新?

2 个答案:

答案 0 :(得分:1)

在PHP中,类总是通过引用传递。 StdClass也不例外。

答案 1 :(得分:1)

传递数组时,不会复制stdClass(与任何其他类一样)。

你的调用函数中的stdClass与你调用的函数中的完全相同

因此它是相同的,对它的任何改变也会影响你在你的调用函数中得到的东西。

因此,如果不需要这种行为,请使用数组而不是stdClass。