Ho letto un sacco di suggerimenti su come risolvere classobjects incompleti e in realtà ho bisogno di risolvere questi problemi me stesso, in una e-commerce-progetto.
Un suggerimento che ho trovato è semplicemente utilizzare json_decode/json_encode per convertire classi incomplete senza precaricare nulla. Tuttavia, non volevo correre il rischio usando questo, se ci sono versioni PHP precedenti che dipendono ad esempio da PECL, che è descritto allo http://php.net/manual/en/function.json-encode.php - così finalmente sono riuscito a fare la mia soluzione.
Tuttavia, il codice è un modo per estrarre correttamente i dati dall'oggetto, quindi potrebbe non essere adatto a tutte le esigenze e, in primo luogo, utilizzare innanzitutto la soluzione json, se è disponibile nell'ambiente e non riesce oltre alla gestione manuale se necessario.
Funziona anche in modo ricorsivo, che nel mio caso è richiesto, per salvare l'intero array.
/**
* 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;
}
fonte
2016-03-08 09:02:42
Su quel secondo pezzo di codice, intendevi fixObject invece di fixclass? Potrebbe essere fonte di confusione. – Cyprus106
potresti anche usare il caricatore automatico per caricare la classe, il che farebbe scomparire l'intero problema. – StasM
dopo unserialized, non riesco ancora ad accedere alle proprietà, ma foreach è ok per me. – Sithu