PHP stdClass...array oggetto per XML
Nella documentazione ufficiale di php possiamo leggere la seguente definizione:
stdClass is the default PHP object. stdClass has no properties, methods or parent.
It does not support magic methods, and implements no interfaces.
When you cast a scalar or array as Object, you get an instance of stdClass.
You can use stdClass whenever you need a generic object instance.
Quindi per stdClass, si intende una classe generica di PHP che possiamo utilizzare per raggruppare varie proprieta' di
un oggetto, in una forma simile a quella che utilizzermo con un array.
Per creare l'oggetto, occorre innanzitutto istanziare la relativa classe e poi gli associamo due stringhe, come di seguito vi illustro con un semplice esempio
myObject = new stdClass;
myObject -> firstProperty = "qwerty";
myObject -> otherProperty = "another qwerty".
Come potete osservare, l'assegnazione avviene usando il costrutto "->" associato all'elemento
della classe-array.
Naturalmete e' possibile definire strutture piu' complesse, che prevedano la creazione di array
nella classe myObject.
Ad esempio
myObject->firstLevel[$index]->StartDay=$sStartDay; myObject->firstLevel[$index]->EndDay=$sEndDay;
Insomma, come potete osservare c'e' molta flessibilita'.
E quando si parla di flessibilita', viene subito in mente il formato XML :)
Capita spesso che per l'interazione tra PHP e un web service, si utilizzi l'oggetto stdClass.
Facciamo un esempio di una semplicissima struttura xml di interscambio di dati
(nota: tralascio in questo momento qualsiasi spiegazione sulla sintassi XML, a cui
dedichero' presto una spiegazione dettagliata)
Se dobbiamo inviare i dati con questo formato XML, ad esempio, per gli orari invernali di una tratta ferroviaria, questo potrebbe essere lo schema che dobbiamo passare al webservice
<typeTimeTrain>
<defineTime>
<validateFrom>?</validateFrom>
<validateTo>?</validateTo>
<idDay>?</idDay>
<Price>
<normalPrice>?</normalPrice>
<discountPrice>?</discountPrice>
</Price>
<detailDay>
<typeDay>?</typeDay>
<nameDay>?</nameDay>
</detailDay>
</defineTime>
<nameTimeTrain>
Per costruire questo oggetto, dove abbiamo l'array principale defineTime e due array Price e detailDay con un solo elemento, utilizziamo il seguente codice
$aTimeTrain=new stdClass();
$iDefineTime=0;
// Il primo elemeno
$aTimeTrain->typeTimeTrain=$sTypeTimeTrain;
foreach (ciclo per estrazione dei dati da un precedente array){
$aTimeTrain->defineTime[$iDefineTime]->validateFrom=$sValidateFrom;
$aTimeTrain->defineTime[$iDefineTime]->validateTo=$sValidateTo;
$aTimeTrain->defineTime[$iDefineTime]->idDay=$iIdDay;
// L'array Price
$aTimeTrain->defineTime[$iDefineTime]->Price->normalPrice=$sNormalPrice;
$aTimeTrain->defineTime[$iDefineTime]->Price->discountPrice=$sDiscountPrice;
// L'array detailDay
$aTimeTrain->defineTime[$iDefineTime]->detailDay->typeDay=$iTypeDay;
$aTimeTrain->defineTime[$iDefineTime]->detailDay-vnameDay=$sNameDay;
$iDefineTime++;
}
$aTimeTrain->nameTimeTrain=$sNameTimeTrain;
Il risultato, stampabile come sempre con l'istruzione print_r()
stdClass Object
(
[typeTimeTrain] => 1
[defineTime] => Array
(
[0] => stdClass Object
(
[validateFrom] => 2010-08-23
[validateTo] => 2010-08-23
[idDay] => 1
[Price] => stdClass Object
(
[normalPrice] => 10.35
[discountPrice] => 5.22
)
[detailDay] => stdClass Object
(
[typeDay] => W
[nameDay] => Lunedi
)
)
[1] => stdClass Object
(
[validateFrom] => 2010-08-23
[validateTo] => 2010-08-23
[idDay] => 1
[Price] => stdClass Object
(
[normalPrice] => 11.66
[discountPrice] => 8.22
)
[detailDay] => stdClass Object
(
[typeDay] => H
[nameDay] => Martedi
)
)
[2] => stdClass Object
...etc...
)
[nameTimeTrain] => Invernale
)







Linkedin
Flickr
Anobii
Youtube
Lastfm