Ciao a tutti. Qualche giorno fa avevo anticipato la mia intenzione a cimentarmi nella Programmazione ad Oggetti con PHP. Già tempo fa mi ero messo a lavorare con questa realizzando qualche classe piuttosto banale che serviva ai miei scopi, ora volevo approfondire l'argomento.

Ho una pagina in php che chiamiamo Main.php, questa contiene una tabella con una decina di colonne. Per poter render il tutto più interessante ho realizzato il file Main.class.php ovvero un file di classe dove sarà possibile stabilire le colonne che faranno parte della tabella indicandone dei parametri.

Per complicare il tutto ho realizzato la pagina Nascondi.php in questa pagina riporto la lista di colonne presenti in Main.php e permetto tramite una checkbox di selezionare le colonne che si vuole nascondere.

Ora passiamo un po alla parte pratica.
Posterò solo la parte relativa al file di Classe.

Main.class.php
Codice PHP:
<?php
class Tabella{
        
    private 
$var "";
    private 
$contenitore = Array();
    
    public function 
__construct($par) {
        
$this->var $par;
    }

    public function 
displayVar() {
        echo 
$this->var;
    }
    
    public function 
aggiungi($key,$element){
        
$this->contenitore[$key] = $element;
    }
    
    public function 
getElement($key){
        return 
$this->contenitore[$key];
    }  
    
    public function 
getNome($key){
        
$el = ($this->contenitore[$key]);
        return 
$el->getNome();    
    }  
        
    public function 
getDimensione($key){
        
$el = ($this->contenitore[$key]);
        return 
$el->getDimensione();    
    }  
        
    public function 
getVisibile($key){
        
$el = ($this->contenitore[$key]);
        return 
$el->getVisibile();
    }  
        
}

class 
Colonna{
        
    private 
$titolo           "";
    private 
$dimensione  "";
    private 
$visibile     "";
    
    public function 
__construct($titolo,$dimensione,$visibile) {
        
$this->titolo $titolo;
        
$this->dimensione $dimensione;
        
$this->visibile $visibile;
    }
  
    public function 
getNome(){
        return 
$this->titolo;
    }
        
    public function 
getDimensione(){
        return 
$this->dimensione;
    }
        
    public function 
getVisibile(){
        return 
$this->visibile;
    }
                
}
    
$Require_Tabella = new Tabella("PROV");

# Definisco le Colonne
$Require_Tabella->aggiungi("nome_campo",new Colonna("nome_campo""dimensioni","visibilita"));
    
?>
Passiamo ora alla parte di commento.

Come avrete notato alla fine del codice richiamo l'oggetto Tabella, poi tramite la funzione aggiungi vado ad inserire come indice dell'array contenitore il "nome_campo" ed associo i dati della colonna.

Una volta inserite quindi le colonne, dal file Main.php tramite una semplice sintassi posso ottenere tutti i dati.

Ad esempio con l'istruzione $dimensione = $Require_Tabella->getDimensione("nome_campo"); ottengo la dimensione e cosi via.
Per quanto riguarda il pescaggio dei dati infatti non ho problemi.

Il problema sorge quando voglio nascondere una colonna. Ho il file Nascondi.php come detto prima, quando Salvo la scelta delle checkbox controllo quelle che sono settate e vorrei aggiungerci una funzione, la funzione modVisibile() con questa funzione vorrei far si che se la checkbox è selezionata e la colonna è nascosta io possa modificare nel mio file di classe per quella colonna il valore di visibile e il valore della dimensione.

Avevo provato questa strada
Codice PHP:
<?php
# Nell'oggetto Tabella aggiungi
public function modVisibile($key){
    
$el = ($this->contenitore[$key]);
    return 
$el->modVisibile();    
}

# Nell'oggetto Colonna aggiungi
public function modVisibile(){
   
$this->visibile 0;
   return 
$this->visibile;
}
?>
Bene la sintassi pare corretta, ho provato a fare questo test.
codice:
In una pagina a parte ho fatto questo test:
Stampa Visibile di "nome_campo" (ha stampato 1)
Richiamo modVisibile (ha stampato 0)
Stampa Visibile di "nome_campo" (ha stampato 0)
Quindi come vedete il codice 'dovrebbe' funzionare.
Dove sta l'inghippo?

Il casino è questo. Con la pagina Nascondi.php io richiamo la funzione ed effettivamente per quella colonna il campo visibile passa a 0, tuttavia quando torno sulla mia Main.php e magari la ricarico, questa includendo il file di Classe molto probabilmente mi resetta l'array e quindi perde la mia modifica ed è qui che non so come andare avanti. Penso che il casino nasca da questo: private $contenitore = Array(); definito nell'oggetto Tabella, tuttavia se non lo indico non funziona nulla

Quindi tutto sto casino per chiedervi, come posso fare per via che la modifica fatta nella pagina Nascondi.php sia effettiva anche per la Main.php

In entrambe le pagine includo il file Main.class.php.

Grazie infinite a tutti, sono nelle vostre mani !!!!!!!!