我已经编写了从cURL源读取数据的代码,该数据源然后处理它以提取数据记录。在foreach循环中创建的实例是重复的
每条记录都将成为一个对象的一个实例,其中有几个从数据中设置的变量。一个函数提取所有数据并返回一个对象数组。
问题是所有对象都具有相同的值,这是从源数据读取的最后一条记录。
经过一番测试后,我意识到这是一个参考问题。数据从源读取,然后分配给一个对象,然后将其添加到数组中。同一个对象在遍历源代码中所有记录的循环中被重用。无论何时更新此对象,数组中对象的所有先前值都会重置为最新值,因为它们在更新时会继续引用该对象。
如何让所有的值独立?
function get_object_array() {
//reads raw data from cRUL source, returns array of objects
//array to hold objects
obj_arr = [];
//raw data has been split into array called $record, one element for each object
//loops through $record array
foreach ($record as $rec) {
//splits $rec into array of data called $data
//creates new object, but problem here as this object
//is being referenced by all values so last value
//changes all previous objects in array
$obj = new SaleItem();
//populates object with record data array
$obj->set_data($data);
//add object to array
$obj_arr [] = $obj;
}
return $obj_arr;
}
更新:这里是设置数据的功能:
function set_data (array $arr) {
global $order_num, $name, $price, $cprice, $cheapest, $category;
try {
$order_num = (int)$arr[0];
$name = $arr[1];
$price = (float)$arr[2];
$cprice = (float)$arr[3];
$cheapest = $this->$price <= $this->$cprice ? true : false;
$category = $arr[5];
return true;
}
catch (Exception $ex) {
echo $ex;
return false;
}
}
更新:满级代码:
class SaleItem {
public $order_num = 12;
public $name = "";
public $price = 3.4;
public $cprice = 5.6;
public $cheapest = true;
public $category = "No Category";
function set_data (array $arr) {
try {
$this->order_num = (int)$arr[0];
$this->name = $arr[1];
$this->price = (float)$arr[2];
$this->cprice = (float)$arr[3];
$this->cheapest = $price <= $cprice ? true : false;
$this->category = $arr[5];
return true;
}
catch (Exception $ex) {
echo $ex;
return false;
}
}
function get_data() {
echo $this->order_num . ' num<br/>';
echo $this->name . ' name<br/>';
echo $this->price . ' price<br/>';
echo $this->cprice . ' cprice<br/>';
echo $this->cheapest . ' cheapest<br/>';
echo $this->category . ' category<br/>';
echo '<br/>';
}
}//end SaleItem class
岂不是'$ obj-> set_data($ REC)各分配;'? –
'$ data'从哪里来? – yivi
$数据在进一步处理后从$ rec衍生。 $ rec是一个包含6个值的字符串,$ data是一个数组,这些值被拆分并从字符串中清除。 – Kwangle