Ciao a tutti,
sto giochicchiando un pò con l'OOP di PHP 5 e volevo cercare di capire meglio l'ereditarietà.
Posto subito il codice:
Codice PHP:
class str {
var $string;
function __construct($str) {
$this->string = $str;
}
// stampa la stringa originale
function stampa() {
echo $this->string;
}
// stampa il l'hash MD5 della stringa
function stampaMD5() {
echo md5($this->string);
}
// stampa la stringa al rovescio
function inverti() {
$nChars = strlen($this->string);
$Str = $this->string;
for ($i = 0; $i < $nChars; $i++) {
$arr[] = $Str[$i];
}
echo implode("",array_reverse($arr,true));
}
}
class saluta extends str {
var $msg;
function saluta($msg) {
$this->msg = new str($msg);
}
function stampaUC() {
echo strtoupper($this->msg->string);
}
}
$ciao = new saluta('ciao');
$ciao->msg->stampa();
$ciao->msg->stampaUC();
In pratica creo una classe "saluta" in cui inizializzo una stringa.
Su questa stringa passata al costruttore creo poi un nuovo oggetto perchè voglio che la stessa acceda a diversi metodi della classe ereditata "str". *
E vi accedo quindi con: $ciao->msg->metodo().
Se però volessi creare un metodo personalizzato nella classe "saluta" perchè non posso accedervi con: $ciao->msg->stampaUC() ma solo con $ciao->stampaUC() ?
Come dovrei fare per poter accedere in modo uguale ai metodi della classe "str" con:
$ciao->msg->stampaUC()?
Potendo dunque avere una sintassi coerente come:
$ciao->msg->stampa()
$ciao->msg->stampaUC()
Scusate se ho fatto qualche errore (orrore) logico nell'impostazione del codice ma è proprio perchè lo sto studiando che ho bisogno di chiarimenti.
* Il fatto di aver costruito la variabile "msg" come oggetto l'ho fatto per vedere come funzionava l'annidamento degli oggetti, altrimenti so anch'io che mi bastava solo ereditare "str" ed il gioco era fatto. 
Tnx.