Sono su PHP 5.
gli passo un NUMERO O INDICE...attributes è una COLLECTION.
praticamente sto cercando il modo o il pattern che mi permetta di DEFINIRE un metodo di DEFAULT. esempio:
$Oggetto->Attributes->Item(1)->getValue()
vorrei poterlo scrivere come:
$Oggetto->Attributes->Item(1)
e come
$Oggetto->Attributes(1)
mmm...invece di postare il codice faccio un esempio. mettiamo di avere una classe Principale ed una incapsulata in una proprietà che chiameremo Figlia:
Codice PHP:
class Principale{
private $Figlia;
function __construct(){
$this->Figlia = new Figlia("chiave1", "valore1");
}
function Figlia(){
$this->Figlia->getValue();
}
}
class Figlia{
private $value; // string
private $key;
function __construct($k, $v){
$this->setKey($k);
$this->setValue($v);
}
public function getValue(){
return $this->value;
}
public function getKey(){
return $this->key;
}
public function setValue($s){
$this->value = $s;
}
public function setKey($s){
$this->key = $s;
}
}
sostanzialmente vorrei che scrivendo:
Codice PHP:
$objPrincipale = new Principale;
$str = $objPrincipale->Figlia; // [->getValue()]
... mi tornasse di default il valore, per questo ho implementato il metodo Figlia nella classe Principale ma non è la strada giusta perchè se volessi lanciare il metodo setValue lasciando inalterata la sinossi cioè così....
Codice PHP:
$objPrincipale = new Principale;
$str = $objPrincipale->Figlia->setValue("valore2");
...non funzionerebbe. Secondo me il trucchetto, se esiste, è legato alla visibilità da parte della classe Figlia della classe principale tramite un riferimento ...
es.
Codice PHP:
class Principale{
private $Figlia;
function __construct(){
$this->Figlia = new Figlia("chiave1", "valore1", $this);
}
.....................
class Figlia{
private $value; // string
private $key;
private $Container;
function __construct($k, $v, $objContainer){
$this->setKey($k);
$this->setValue($v);
$this->Container = $objContainer;
}
.... ...... ......
oppure potrei rendere pubblica la visibilità della proprietà Figlia ma vorrei evitarlo a meno che non esista un modo per rendere le proprietà di una classe pubbliche ma in sola lettura (creazione metodi a parte naturalmente).
mah!