Добрый день!
Столкнулся со странным поведением PHP. Ну или со своей не полной компетентностью в данном вопросе.
Прошу помощи у знающих людей.
Заранее благодарен.
Суть ситуации.
Есть образный статический класс Items
у него 2 статические функции
Items::preload() - формирует массив элементов и записывает в приватное свойство класса
Items::getItems() - возвращает список элементов сгенерированных первой функцией
Теперь, что работает не так как мне хотелось бы.
Items::preload();
$list = array(
'action1' => 'addOne',
'action2' => 'addTwo'
);
foreach( $list as $key => $action ){
$itemList = Items::getItems();
foreach( $itemList as $id => $item ){
$itemList[ $id ] = doSomethinkWithItem( $action, $item );
}
}
function doSomethinkWithItem( $action, $item ){
$item->{$action} = 'someText';
}
class Items {
private static $arItems;
public static function preload(){
// $arItems выборка из базы
foreach($arItems as $ID => $data){
$one = new \stdClass();
$one->id = $ID;
$one->name = $data["NAME"];
self::$arItems[ $ID ] = $one;
}
}
public static function getItems(){
return self::$arItems;
}
}
Проблема:
При повторном получении списка элементов методом $itemList = Items::getItems();
у элементов сохраняются свойства после обработки первым методом, а мне необходимо, что бы на момент начала работы со списком, он был неизменный и изначально заданный. Т.к. во время работы с ним, какие то характеристики меняются, какие то удаляются элементы вообще.
Кто может подсказать что не так со структурой и как сделать так, что бы изначально сформированный список не изменялся вообще и отдавался всегда один и тот же?