Я прочитал много предложений о том, как исправить неполные classobjects, и я на самом деле нужно, чтобы исправить те проблемы сам, в электронной коммерции-проекта.
Одно из предложений, которое я нашел, - это просто использовать json_decode/json_encode для преобразования незавершенных классов без предварительной загрузки. Тем не менее, я не хотел рисковать этим, если есть более старые версии PHP, которые зависят, например, от PECL, описанного в http://php.net/manual/en/function.json-encode.php, поэтому я, наконец, смог сделать свое собственное решение.
Однако код является способом получения данных из объекта должным образом, поэтому он может не соответствовать всем потребностям - и в первую очередь он использует json-решение, если он доступен в среде и не работает если необходимо.
Он также работает рекурсивно, что в моем случае необходимо, чтобы сохранить весь массив.
/**
* Convert a object to a data object (used for repairing __PHP_Incomplete_Class objects)
* @param array $d
* @return array|mixed|object
*/
function arrayObjectToStdClass($d = array())
{
/**
* If json_decode and json_encode exists as function, do it the simple way.
* http://php.net/manual/en/function.json-encode.php
*/
if (function_exists('json_decode') && function_exists('json_encode')) {
return json_decode(json_encode($d));
}
$newArray = array();
if (is_array($d) || is_object($d)) {
foreach ($d as $itemKey => $itemValue) {
if (is_array($itemValue)) {
$newArray[$itemKey] = (array)$this->arrayObjectToStdClass($itemValue);
} elseif (is_object($itemValue)) {
$newArray[$itemKey] = (object)(array)$this->arrayObjectToStdClass($itemValue);
} else {
$newArray[$itemKey] = $itemValue;
}
}
}
return $newArray;
}
На этом втором фрагменте кода вы имели в виду fixObject вместо fixclass? Может быть, смущает. – Cyprus106
вы можете также использовать автозагрузчик для загрузки класса, что бы устранить всю проблему. – StasM
после unserialized, я не могу получить доступ к свойствам, но foreach в порядке для меня. – Sithu