gpt4 book ai didi

php - 将对象传递给 php 中的函数

转载 作者:搜寻专家 更新时间:2023-10-31 21:23:44 25 4
gpt4 key购买 nike

我在一个对象中有一个静态函数,它做一些事情并返回一个像这样的对象:

$objectA = ObjectA::getItem();

然后我有一个函数可以生成其他类型的对象并返回它们的数组,这些类型的对象中的一部分需要 $objectA,所以它像这样传入:

$arrayOfObjectB = ObjectB::getStuff($objectA);

在构造 $arrayOfObjectB 时,我更改了 $objectA 的一部分,这将是 $objectB 的一部分。

像这样:

public static function getStuff($objectA)
{
$arrayOfObjectB = array();
foreach(...loops through some stuff)
{

$objectA->setSomething($variableChangedDuringLoop);
$objectB = new ObjectB($objectA);
$arrayOfObjectB[] = $objectB;
}
}

发生的事情是 $arrayOfObjectB 中的所有 $objectA->something 都将设置为与循环中的最后一项相同的东西,我会这样喜欢发生的是 $something 保存在循环期间设置的单独值。

我可以在循环期间每次克隆对象,然后设置它们,这样就可以了。但这种方法似乎是“错误的”。

最佳答案

当您将对 $objectA 的引用传递给函数或构造函数时,不会创建对象的副本。如果您对 $objectA 进行修改,您将影响存在于函数(或构造函数)之外的同一对象实例。如果你想要独立的实例,你需要制作一个对象的副本。像这样:

public static function getStuff($objectA)
{
$arrayOfObjectB = array();
foreach(...loops through some stuff)
{
// make a copy of $objectA
$objectAClone = new ObjectA();
$objectAClone->setX($objectA->getX());
$objectAClone->setY($objectA->getY());
...
$objectAClone->setSomething($variableChangedDuringLoop);
$objectB = new ObjectB($objectAClone);
$arrayOfObjectB[] = $objectB;
}
}

关于php - 将对象传递给 php 中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40872065/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com