costante di classe o switch?

 :) ciao,

Gianni spiego subito il problema

ho una funzione che in base ad una costante o per meglio dire una stringa in maiuscolo passata come argomento mi restituisce determinate impostazioni del sistema ( del programma )

ho usato uno switch per controllare i valori inseriti :

       function GetMainSettings($case){
         
         switch($case){
         
            /* STATUS_ERROR_LOG
             * get the error log status, if is set to 0 print errors 
             * if is set to 1 log errors
             * default : 1
             */
            case 'STATUS_ERROR_LOG':
               $field = 'errorlog';
            break;
            
            /* STATUS_SITE_ONLINE
             * get the website status, if set to 1 is available
             */
            case 'STATUS_SITE_ONLINE':
               $field = 'online';
            break;
            
            /* STATUS_ADS
             * get the ads status,if set to 1 the ads are visible
             * to hide ads just modify the value to 0
             * default : 1
             */
            case 'STATUS_ADS':
               $field = 'ads';
            break;
            
            /* STATUS_SEARCH_ENGINE
             * get the search engine status,set to 0 to hide the search engine
             * default : 1
             */
            case 'STATUS_SEARCH_ENGINE':
               $field = 'searchengine';
            break;

            /* SESSION_EXPIRE
             * session expiry time in seconds
             * default : 300
             */
            case 'SESSION_EXPIRE':
               $field = 'sessionexpiry';
            break;
            
            /* SEARCH_FLOOD
             * limits 1 search per n sec
             * default : 30
             */
            case 'SEARCH_FLOOD':
               $field = 'searchlimit';
            break;
            
         }
         
         $this->query = "SELECT `" . $field . "` FROM `" . $this->conf['prefix'] . "settings`";
         $this->exec  = mysql_query($query);
         $value = mysql_result($exec,1);
         
         $this->ClearData();
         
            return $value;
            
      }

volevo sapere se è corretto così o invece sarebbe meglio utilizzare delle costanti di classe

( const STATUS_ONLINE = 'online' ecc )

costanti

o stringhe da switchare?

 :bye:

inviato 10 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

nessuna delle due.

Usa delle stringhe che fungono da chiavi di un array associativo. Carica l'array all'avvio (una sola query!) e poi rispondi alle interrogazioni cercando nell'array i valori associati.

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

lol ?

ma le impostazioni sono nel database ... perchè così l'amministratore può editare tutto dal suo pannello di amministrazione ... se metto tutto nell'array sarò sempre costretto a popolarlo in qualche modo. no?

:bye:

risposto 10 anni fa
Andrea Turso
Andrea Turso
86
X 0 X
       function GetMainSettings($index){
      
         if(!isset($this->settings) || !is_array($this->settings)){
            $query = "SELECT * FROM `" . $this->conf['db']['prefix'] . "settings`";
            $exec  = mysql_query($query);
            $this->settings = mysql_fetch_array($exec);
         }            
      }

in questo modo carica l'array solo al primo avvio dello script ( quando viene eseguito ) e rimangono in menoria fino alla fine dell'esecuzione,intendevi fare cos' tu Gianni?

ora posso chiamarla tante volte consecutive ma solo la prima viene caricata dal DB tutte le altre chiamate saltano la query

ora procedo con la selezione dei campi

PS: lo switch devo utilizzarlo ugualmente per varicare l'indice da scegliere in base al valore che passo come argomento

STATUS_ONLINE corrisponderebbe poi a online

STATUS_SEARCH_ENGINGE cossisponderebbe a searchengine

queste non sono costanti ma stringhe passate in maiuscolo

:bye:

risposto 10 anni fa
Andrea Turso
Andrea Turso
86
modificato 10 anni fa
X 0 X
       public function GetMainSettings($index){
      
         if(!isset($this->settings) || !is_array($this->settings)){
            $query = "SELECT * FROM `" . $this->conf['db']['prefix'] . "settings`";
            $exec  = @ mysql_query($query);
            
            /* If the database is unavailable provides
             * to set $this->settings to null value
             */
            if($this->settings = @ mysql_fetch_array($exec)){
               $this->settings = NULL;
            }
         }
         
         switch($index){
         
            /* STATUS_ERROR_LOG
             * get the error log status, if is set to 0 print errors 
             * if is set to 1 log errors
             * default : 1
             */
            case 'STATUS_ERROR_LOG':
               $value = !isset($this->settings) ? $this->settings[6] : 0;
            break;
            
            /* STATUS_SITE_ONLINE
             * get the website status, if set to 1 is available
             */
            case 'STATUS_SITE_ONLINE':
               $value = !isset($this->settings) ? $this->settings[8] : 1;
            break;
            
            /* STATUS_ADS
             * get the ads status,if set to 1 the ads are visible
             * to hide ads just modify the value to 0
             * default : 1
             */
            case 'STATUS_ADS':
               $value = !isset($this->settings) ? $this->settings[2] : 1;
            break;
            
            /* STATUS_SEARCH_ENGINE
             * get the search engine status,set to 0 to hide the search engine
             * default : 1
             */
            case 'STATUS_SEARCH_ENGINE':
               $value = !isset($this->settings) ? $this->settings[1] : 1;
            break;

            /* SESSION_EXPIRE
             * session expiry time in seconds
             * default : 300
             */
            case 'SESSION_EXPIRE':
               $value = !isset($this->settings) ? $this->settings[5] : 300;
            break;
            
            /* SEARCH_FLOOD
             * limits 1 search per n sec
             * default : 30
             */
            case 'SEARCH_FLOOD':
               $value = !isset($this->settings) ? $this->settings[7] : 30;
            break;
            
            default:
               $this->ThrowError('Impossibile caricare impostazioni');
            break;

         }   
         //echo '<pre>'; print_r($this->settings);
         
         return $value;
      }

se non si connette al db per qualche oscuro motivo utilizza un valore di default in modo che non ci sia qualche falla nella sicurezza :D

cosa ne pensi Gianni sta bene?

:bye:

risposto 10 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

Io avrei messo il caricamento dell'array nel costruttore della classe.

Poi non avrei implementato il valore di default, tanto se il DB è giù l'applicazione (generalemente) è inutilizzabile. Se mai avrei vatto un controllo della stringa passata per vedere se è realmente presente nell'array, emettendo un errore o un'eccezione.

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

eheheh le eccezioni : simpaticissime sconosciute :D

non le so usare... anzi non so proprio che cosa siano ;D

:bye:

risposto 10 anni fa
Andrea Turso
Andrea Turso
86
X 0 X
Io avrei messo il caricamento dell'array nel costruttore della classe.

Giusto non ci avevo riflettuto  ???

Poi non avrei implementato il valore di default, tanto se il DB è giù l'applicazione (generalemente) è inutilizzabile.

Anche qui non hai torto il valore di default serve a ben poco ^-^

Se mai avrei vatto un controllo della stringa passata per vedere se è realmente presente nell'array, emettendo un errore o un'eccezione.

 :bye:

ora studio le eccezzioni, se non capisco apro un topic  :P

Grazie  :bye:

risposto 10 anni fa
Andrea Turso
Andrea Turso
86
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda