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.