当我将数据从一个函数传递给一个类时,我有一个问题是它正在更新我在原始类中传递的数据,即使我没有通过引用这样做。
<?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
}
}
Array
(
[one] => stdClass Object
(
[qty] => 2
)
)
Array
(
[one] => stdClass Object
(
[qty] => 1
)
)
Array
(
[one] => stdClass Object
(
[qty] => 1
)
)
#3中的$ testData如何更新?
答案 0 :(得分:1)
在PHP中,类总是通过引用传递。 StdClass
也不例外。
答案 1 :(得分:1)
传递数组时,不会复制stdClass(与任何其他类一样)。
你的调用函数中的stdClass与你调用的函数中的完全相同。
因此它是相同的,对它的任何改变也会影响你在你的调用函数中得到的东西。
因此,如果不需要这种行为,请使用数组而不是stdClass。