Lol non saranno due ma ben felice di spiegare anche se sara' piu difficile far capire
la struttura che il problema.
n.b. scrivo gli esempi a mano libra quindi perdonate se ci sono errori sintattici ma il mio fine e' far capire la struttura non produrre un codice funzionante.

Ho una classe elemento e una classe insieme che ha una lista di elementi

Codice PHP:
class elemento {
      public 
$dato;
      public 
__construct ($in) {
              
$this->dato $in;
      }
}

class 
lista  {
     public 
$listadati = array();

     public 
__construct ($num) {
            for (
$i 0$num$i ++) {
                    
$this->listadati[] = new elemento($num);
            }
     }

ora crea altri due classi che ereditano le prime elementoHtml e listaHtml
Codice PHP:
class elementoHtml extends elemento {

      public 
__construct ($in) {
              
parent::__construct($in);
      }

       public 
toHtml() {
           return 
"<span>$this->dato</span>";
       }
}

class 
listaHtml extends lista {
     public 
__construct ($num) {
        
parent::__construct($num);
     }
     
     public 
toHtml() {
         foreach (
$this->listadati as $celem) {
              echo 
$celem->toHtml()."
\n"
;
         }
     }


il mio obbiettivo e' che il costruttore lista allocasse una array di obj elemento se la classe
era lista e elementoHtml se la classe era listaHtml.

e avevo fatto cosi
Codice PHP:
class lista  {
     private 
$listaType;
     public 
$listadati = array();

     public 
__construct ($num) {
            if (
strcmp(__CLASS__,"lista")) {
                 
$this->listaType "elemento";
            } else  {
                 
$this->listaType "elementoHtml";
            }

            for (
$i 0$num$i ++) {
                    
$this->listadati[] = new $listaType($num);
            }
     }

ma e' sbagliato perche' __CLASS__ e' sempre lista io pensavo invece che facesse riferimento all'oggetto istanziato quindi cambiasse a seconda dei casi.
Alla fine ho risolto cosi ...

Codice PHP:
class lista  {
     private 
$listaType;
     public 
$listadati = array();

     public 
__construct ($num,$ltype "elemento") {

            
$this->listaType $ltype;
            for (
$i 0$num$i ++) {
                    
$this->listadati[] = new $listaType($num);
            }
     }
}

class 
listaHtml  extends lista {
     public 
__construct ($num) {
        
parent::__construct($num,"elementoHtml");
     }
     
     public 
toHtml() {
         foreach (
$this->listadati as $celem) {
              echo 
$celem->toHtml()."
\n"
;
         }
     }


cosi funziona pero magari ci sono metodi migliori se hai idee in merito

Andrea