Domanda

Ho un'istanza dell'oggetto che dipende da altri oggetti, per esempio.

$objA = new Some_Class();
$objB = new Other_Class();
$objC = new Another_One();

$objA->property = new stdClass;
$objB->key = $objA;
$objB->arr = array(new Other_Object());

$objectC->property = $objB
$objectC->other = array(array('k'=>'v'));

Come posso ottenere un elenco delle classi utilizzato in $objectC?

In questo caso particolare:

array(
    'Some_Class',
    'Other_Class',
    'Another_Class',
    'stdClass',
    'Another_Object'
)

Ho bisogno di serializzare l'oggetto, ma prima di deserializzazione, ho bisogno di creare un'istanza di tutte le classi necessarie.
Come si otterrebbe automaticamente le classi?

È stato utile?

Soluzione

serialize non è superficiale, è profondo.

Questo significa che se si chiama serialize($objectC);, che stai ricevendo non solo $ ObjectC, ma anche tutte le sue proprietà, compresi eventuali oggetti che potrebbe contenere .

Se deve reinstanziare uno degli oggetti figlio (diciamo che è un adattatore di database, che contiene una risorsa unserializable), prendere in considerazione l'attuazione della Serializable interfaccia, che consente di eseguire il controllo a grana fine sul serializzare e operazioni unserialize che semplicemente non è possibile con il __sleep / __wakeup metodi magici. È possibile utilizzare i metodi forniti dall'interfaccia di restituire una struttura di dati personalizzato che vi permetterà di ricostruire manualmente l'oggetto, se necessario.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top