problema gestione classi

Ciao a tutti, ho il seguente problema.

Sto creando un'applicazione 'orientata' agli oggetti, creando 3 oggetti principali(uno per le operazioni, uno per il controllo ed una per la gestione degli errori). Creo la mia struttura con attributi privati, funzioni pubbliche etc.. negli ultimi 2 oggetti non ho problemi(ancora), ma nell'oggetto per attuare delle operazioni(legate ad un db oracle 10g XE) qualcosa non quadra. L'oggetto si presenta cosi: come attributo privato ho 1 array di tipo associativo 'nome_chiave'=>'valore_chiave' ed un metodo pubblico rilevaAttributo()

riporto il listato:

class Iprova{

      private $campi //ho provato ad inizializzare l'array con valori =>"",

   //COSTRUTTORE

   public function __construct($recRif){//recRif è l'argomento passato al costruttore, ed è un record di una tabella

      $i=0;

      while (list($chiave,$valore)=each($recRif)){

          $chiave=strtolower($CHIAVE);      //do il nome chiave in minuscolo

         //echo "$chiave corrisponde a => $valore<br />";

         $this->campi['$chiave']=$valore;

         //echo "$chiave corrisponde a => " . $this->campi['$chiave'] ."<br />" ;

         //echo $this->campi['$chiave'] . "<br />";//qui sembra funzionare correttamente, ma c'è qualcosa che non mi quadra

         $i++;

         $valori= array_values($this->campi);

         echo "<br />";

         print_r($valori);  //mi stampa per tutte le coppie chiave/valore "Array ( [0] => valore_record)"

      }

//fuori dal ciclo già ci sono i problemi seri, ovvero non c'e' più corrispondenza $this->campi['$chiave']

      echo $this->campi['chiave_x']; //output vuoto, non c'è piu corrispondenza corretta...fma forse già non c'era

      echo "<br />";

   }

   public function rilevaCampoX(){

       if ($this->campi['campo_x']==""){

         echo "non prende  il campo x.";//ovviamente mi risponde sempre che non trova nulla

      } else {

         return $this->campi['campo_x'];

      }

   return $this->campi['campo_x'];

   }

Da controllo principale faccio

$prova= new Iprova($recRif);

$camo_x=$prova->rilevaCampoX(); //ma il risultato è vuoto...

Insomma,in fine, non mi associa correttamente ila chiave dell'array col valore. Dove ho sbagliato?

facendo un assurdo print_r nel ciclo while{} di tutta l'array, ho notato che mi aggiunge un campo alla fine col valore che volevo assegnarli

Qualcuno può cortesemente aiutarmi?

Andrea Meriggioli

inviato 9 anni fa
cybaSsh
X 0 X

rileggendo mi sono accorto di essere stato un po confuso....riposto il codice:

Class Iprova{
   private $campi=array("campo1"=>"",
            "campo2"=>"",
            "campo3"=>"");
   
   public function __construct($recRif){
      while (list($chiave,$valore)=each($recRif)){
          echo $valore . "<br />";
         $this->campi['$chiave']=$valore;
         echo "Chiave $chiave ha il valore di " . $this->campi['$chiave'] . "<br />";
      }
      print_r($this->campi);
   }
   
   public function DaiCampo(){
      if (isset($this->campi['campo1'])){
            return $this->campi['campo1'];
      } else {
         echo "campo non esiste";
      }
   }
}


require('ClassicarRec.php');

$recRif=array("campo1"=>"valore1",
            "campo2"=>"valore2",
            "campo3"=>"valore3");
            
$oggetto=new Iprova($recRif);

echo $oggetto->DaiCampo();

Quest'oggetto con il metodo DaiCampo() non mi restituisce nulla, ed ho notato che nel costruttore, nel ciclo while , mi mantiene una certa corrispondenza nella coppia $chiave, $valore, ma credo non sia corretta.

il print_r($this->campi); mi da in output:

Array ( [campo1] => [campo2] => [campo3] => [$chiave] => valore3 )

Viene messo alla fine una chiave di nome $'chiave' di valore 'valore3'

Quale regola non ho rispettato?

risposto 9 anni fa
cybaSsh
X 0 X

...porc...

era una cavolata...la sintassi giusta era :

$this->campi[$chiave]=$valore;

e non

$this->campi['$chiave']=$valore;

e si possono fare degli attributi privati di tipo array dinamici, direttamente caricando i record(con OCI_RETURN_NULL+OCI_ASSOC)... piano piano s'impara...

Andrea

risposto 9 anni fa
cybaSsh
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda