Grazie per la risposta...
la tua soluzione non è applicabile perchè non posso passare al metodo attribute l'istanza di una classe che in esso è contenuta, da dove lo piglio $item???. Infatti Attributes non fa altro che ritornarmi un elemento della proprietà array (in realtà Collection) Attributes, che è un Item.
comunque la soluzione (che mi è venuta in mente proprio iniziando questo 3d...) testata e funzionante è creare un metodo Attribute in modo da poter richiamare l'istanza Item in questo modo:
// return Item instance !
Oggetto.Attributes("nome");
e il suo valore in questo:
// return Item value Property !
Oggetto.Attribute("nome")
e naturalmente....
Oggetto.Attributes("nome")-getValue(); // che non uso +
questo approccio mi ha permesso di non essere invasivo nel codice, aggiungendo un metodo Attribute alla classe Oggetto e sostituendo tutte le occorrenze dove necessario. Il codice è notevolmente migliorato in leggibilità...e logica
è un po' ilo concetto che si ritrova in ADO:
rs.Fields.Item(1).Value
Fields ritorna la collection Fields
// è come scrivere
rs.Fields.Item(1)
Fields ritorna la collection Fields e Item ritorna di default il valore
//e scrivere...
rs.Fields(1).Value
Fields ritorna l'istanza item alla quale viene applicato il metodo value (o proprietà pubblica?)
// e scrivere ....
rs.Fields(1)
Fields ritorna l'istanza item attraverso il metodo Item (implementazione) che di DEFAULT ritorna il proprio valore
probabilemente si può ottenere un effetto così anche con php creando ad esempio un metodo Fields che può o meno ricevere 1 parametro.
nel primo caso richiamerebbe il metodo Item che ritorna il valore , nel secondo l'intera collection di Items (Attributes).
QUINDI:
Così per teenere Item->getValue() posso scrivere:Codice PHP:
Class Oggetto{
private Attributes; // Collection
function Attributes($n = null){
if($n){
return $this->Attributes->Item($n);
}else{
return $this->Attributes;
}
}
}
Class Attributes extends Collection{
//[ parent!
function Item($n){
return $this->getItem($n)->getValue();
}
function getItem($n){
return $this->getItem($n);
}
// parent
}
Dove ho scritto // ????? non so come fare....Codice PHP:Oggetto.Attributes().Item(1)
Oggetto.Attributes().Item(1).getValue() // ?????
oppure
Oggetto.Attributes(1)
Oggetto.Attributes(1)->getValue() // ?????
La discussione è aperta...
PS: spero di essere stato + chiaro... :master:

Rispondi quotando