Visualizzazione risultati 1 fino 13 di 13

Discussione: Costanti e Variabili!

  1. #1
    Guest

    Question Costanti e Variabili!

    Ciao ragazzi!
    Durante il mio percorso di apprendimento per imparare il linguaggio PHP, mi sono imbattuto come giusto che sia, nelle costanti.
    Dal manuale ufficiale è semplice capire la differenza tra esse e le variabili, infatti mentre queste ultime possono essere modificate ( intendo il valore ), le costanti no!

    Il mio dubbio, che sorge spontaneo probabilmente dovuto al fatto che sto affrontando ancora un percorso teorico, è comprendere in realtà, la vera utilità delle costanti. Perché usarle? Perché non usare sempre le variabili?

    Grazie mille in anticipo.

  2. #2
    Guest

    Predefinito

    Non credo che in PHP ci siano differenze, anche se in altri linguaggi sì.
    Più che altro, serve a livello di leggibilità: se qualcuno leggesse il codice saprebbe subito se ciò che sta vedendo potrà avere un valore diverso da quello iniziale o no.
    Per esempio se trovassi una pagina con una frase stampata con una echo e volessi cambiarla, se fosse scritta come
    Codice PHP:
    define('COST', 'Una costante');
    // Altro codice
    echo COST;
    saprei che dovrei fermarmi alla prima riga per cambiare il suo valore, perché di sicuro non cambierà più avanti e la echo stamperà sicuramente il nuovo valore; invece se fosse stata scritta così
    Codice PHP:
    $var = 'Una variabile';
    // Altro codice
    $var = 'Un altro valore';
    // Ancora altro codice
    echo $var;
    non mi sarei potuto fermare alla prima riga, perché ci sarebbe potuta essere una modifica successiva.
    Ovviamente pensa ai commenti "Altro codice" come tante righe di codice vario
    Ultima modifica di gdrfaidate : 13-08-2013 alle ore 17.00.18

  3. #3
    Guest

    Predefinito

    Citazione Originalmente inviato da gdrfaidate Visualizza messaggio
    Non credo che in PHP ci siano differenze, anche se in altri linguaggi sì.
    Più che altro, serve a livello di leggibilità: se qualcuno leggesse il codice saprebbe subito se ciò che sta vedendo potrà avere un valore diverso da quello iniziale o no.
    Per esempio se trovassi una pagina con una frase stampata con una echo e volessi cambiarla, se fosse scritta come
    Codice PHP:
    define('COST', 'Una costante');
    // Altro codice
    echo COST;
    saprei che dovrei fermarmi alla prima riga per cambiare il suo valore, perché di sicuro non cambierà più avanti e la echo stamperà sicuramente il nuovo valore; invece se fosse stata scritta così
    Codice PHP:
    $var = 'Una variabile';
    // Altro codice
    $var = 'Un altro valore';
    // Ancora altro codice
    echo $var;
    non mi sarei potuto fermare alla prima riga, perché ci sarebbe potuta essere una modifica successiva.
    Ovviamente pensa ai commenti "Altro codice" come tante righe di codice vario
    Hai ragione! Ora mi è molto più chiaro, il motivo principale resta comunque la leggibilità! Grazie mille!

  4. #4
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Aggiungo, più che alla differenza tra costanti e variabili, sarebbe meglio che ti focalizzassi sulla differenza tra costanti e i cosiddetti "valori magici" (cioè numeri o stringhe che si ripetono sistematicamente nel codice per un determinato motivo - grandezze matematiche o fisiche, password predeterminate e quant'altro).

    Utilizzando i "valori magici" nelle istruzioni, in caso di un loro aggiornamento saresti costretto a cambiare tutte le loro occorrenze per far funzionare il nuovo codice, rischiando così di dimenticartene qualcuna (o di prenderne in mezzo, magari, qualcuna che non c'entra). Questo problema non sussiste se usi saggiamente le costanti: in questo caso, infatti, l'unico aggiornamento che dovresti fare è nella dichiarazione iniziale...

    Stammi bene...
    Ultima modifica di dementialsite : 13-08-2013 alle ore 23.07.38
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  5. #5
    Guest

    Predefinito

    Citazione Originalmente inviato da dementialsite Visualizza messaggio
    sarebbe meglio che ti focalizzassi sulla differenza tra costanti e i cosiddetti "valori magici"
    Scusa, ma quale sarebbe questa differenza? Ciò che chiami "valori magici" in realtà non sono altro che le costanti stesse, come affermi più avanti
    Citazione Originalmente inviato da dementialsite Visualizza messaggio
    Questo problema non sussiste se usi saggiamente le costanti
    Inoltre
    Citazione Originalmente inviato da dementialsite Visualizza messaggio
    in questo caso, infatti, l'unico aggiornamento che dovresti fare è nella dichiarazione iniziale...
    questo è esattamente ciò che ho detto io spiegando la differenza tra costanti e variabili, nonché il motivo per cui sono state create le costanti, cioè scrivere una volta sola ciò che sarà sempre così per tutto il programma, senza doverlo scrivere di volta in volta.
    Non capisco cosa tu abbia aggiunto, siccome hai solo ribadito ciò che avevo già detto io, o mi sbaglio?

    P.S.: Comunque, non ho mai sentito chiamare le costanti "valori magici", e se sono magiche le costanti (che ti evitano di riscrivere tante volte la stessa cosa), cosa dovrebbero essere le variabili, dato che senza di loro non si potrebbe andare molto oltre il semplice programma "Hello world"?

  6. #6
    Guest

    Predefinito

    Beh probabilmente è una sua definizione, oppure mi sfugge qualcosa anche a me, mai sentito parlare di magia se non per i metodi, ma questa è un altra storia

    Ne approfitto per chiedere un altra cosa, sto lavorando ad una piccolissima classe per effettuare un insert velocemente, ecco il codice:

    Codice PHP:
    // Metodo per l'inserimento dei record
    public function db_insert($t,$c,$v = NULL) {
    if(isset(
    $this->db_check)) {
    // Inizio l'inserimento
    $istruzione = 'INSERT INTO '.$t;
    // Controllo che siano stati specificati i campi di destinazione dei valori
    if($c != null) {
    $istruzione .= ' ('.$c.')';
    }
    // Recupero tutti i valori da inserire nei campi
    for($i = 0; $i < count($v); $i++) {
    // Se il valore è di tipo stringa, lo racchiudo tra doppi apici
    if(is_string($v[$i])) {
    $v[$i] = '"'.$v[$i].'"';
    }
    }
    // Recupero tutti i valori e lì separo da una virgola
    $v = implode(',',$v);
    $istruzione .= ' VALUES ('.$v.')';
    // Avvio la quesry di inserimento
    $query = mysql_query($istruzione) or die (mysql_error());
    return
    true;

    } else {
    return
    false;
    }
    }
    Funziona tutto correttamente, solo che per effettuare un controllo che mi interessa, ho aggiunto "return true;" dopo l'esecuzione della query. Volevo sapere, avrà delle ripercussioni sul codice? Nel senso che, l'aggiungere return true, causa dei problemi piu avanti? Mi serve quel valore bool per effettuare un check del tipo "Inserimento avvenuto con successo"

    Vi scrivo dove richiamo il codice.

    Codice PHP:
    $t = "users"; // Nome della tabella
    $c = "name,surname,age"; // Campi da popolare
    $v = array("Carmine","Campi",19); // Valori da inserire

    // Faccio un controllo nel database per evitare la sovrascrittura
    $controllo = $data->db_query("SELECT * FROM users WHERE name = '$v[0]'");
    if(
    mysql_num_rows($controllo)==0) {
    // Chiamata alla funzione per l'inserimento dei dati
    if($data->db_insert($t,$c,$v)) { // <------ QUI MI SERVE SAPERE IL TRUE!!!!
    echo "Inserimento Riuscito";
    }
    } else {
    echo
    "Inserimento Fallito";
    return
    false;
    }
    Grazie in anticipo!
    Ultima modifica di ernestocampese : 14-08-2013 alle ore 02.49.52

  7. #7
    Guest

    Predefinito

    Quel return true serve per entrare nell'if, stampando "Inserimento Riuscito", che verrà stampato se è settato $this->db_check (e se non viene invocata la die) e basta, quindi no, non avrà ripercussioni successive, anche se non so di cosa ti stessi preoccupando.

    Comunque ti consiglio, se vuoi creare una classe per il Database, di usare la classe di PHP (Mysqli) ed estenderla, invece di farne una da zero.

  8. #8
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Citazione Originalmente inviato da gdrfaidate Visualizza messaggio
    ...
    questo è esattamente ciò che ho detto io spiegando la differenza tra costanti e variabili, nonché il motivo per cui sono state create le costanti, cioè scrivere una volta sola ciò che sarà sempre così per tutto il programma, senza doverlo scrivere di volta in volta.
    Non capisco cosa tu abbia aggiunto, siccome hai solo ribadito ciò che avevo già detto io, o mi sbaglio?
    Non proprio... provo a farti un esempio (un po' troppo didattico, ma tant'è...).

    Supponi di dover scrivere un programma che esegua alcuni calcoli (tipo perimetro, superficie, volume) su circonferenze, cerchi, cilindri, coni e quant'altro: ti servirà inevitabilmente di usare la costante matematica pi.

    Se non utilizzassi le costanti (e nemmeno una variabile ad uso costante, vedi in seguito altre argomentazioni), ti troveresti a tappezzare il tuo programma di "valori magici" 3.14 per poter eseguire i calcoli.

    Ora prova ad immaginare cosa dovresti fare se volessi perfezionare il programma, e sostituire il valore 3.14 con quello più esatto 3.14159265359: dovresti, come ti ho detto sopra, sostituire una per una tutte le occorrenze di 3.14 all'interno del programma, con il rischio di saltarne qualcuna o di prenderne in mezzo alcune che, invece, non devono essere modificate (perché quel 3.14 potrebbe avere anche altri significati).

    La dichiarazione della costante ti consente di evitare questo problema: dichiarandola all'inizio, e utilizzandola con il suo significato tutte le volte che ti serve, sei certo che l'aggiornamento della riga dichiarativa si ripercuoterà esattamente su tutte e sole le occorrenze che ti servono. La stessa cosa, anche se un po' meno raffinata, ce l'hai anche se usi una variabile come costante...

    Citazione Originalmente inviato da gdrfaidate Visualizza messaggio
    P.S.: Comunque, non ho mai sentito chiamare le costanti "valori magici", e se sono magiche le costanti (che ti evitano di riscrivere tante volte la stessa cosa), cosa dovrebbero essere le variabili, dato che senza di loro non si potrebbe andare molto oltre il semplice programma "Hello world"?
    Costanti e variabili sono, tecnicamente, due cose molto diverse:
    - una costante è semplicemente una dichiarazione di un valore, che l'interprete/compilatore dovrà provvedere a sostituire in tutte le occorrenze prima di eseguire il codice fornitogli
    - una variabile invece è un'area di memoria riservata e dinamica per sua natura, che viene allocata dall'interprete/compilatore per la conservazione di valori temporanei

    Piccola nota a margine: "valori magici" era la definizione che usava il mio testo di informatica per definire quelli che Wikipedia chiama "letterali"/"literals" -> cfr. http://en.wikipedia.org/wiki/Literal...ter_science%29

    Spero di essere stato un pochino più chiaro, adesso...

    Stammi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  9. #9
    Guest

    Predefinito

    Primo: stai ridicendo le stesse cose di prima (con un esempio inutile), chiarendo ancora di più che ciò che dici è la stessa cosa che ho detto io.
    Secondo:
    Costanti e variabili sono, tecnicamente, due cose molto diverse
    E io cosa ho detto?! Il mio P.S. diceva chiaramente che se consideravi magiche le costanti (che sono una comodità), le variabili sarebbero epiche, considerando che sono effettivamente aree di memoria. Se rinunciassi alle costanti, dovresti sostituire tanti pezzi di codice, ma prova a fare a meno delle variabili. Inoltre parli di interprete/compilatore, implicando che io sappia cos'è e se so cos'è, non mi servirebbe una lezioncina su quale sia la differenza a livello di memoria (senza contare che, essendo programmatore, non mi servono le tue lezioni). Nessuno ha mai chiesto niente di così dettagliato, ma solo il motivo per cui usare una o l'altra.
    Terzo:
    Piccola nota a margine: "valori magici" era la definizione che usava il mio testo di informatica per definire quelli che Wikipedia chiama "letterali"/"literals" -> cfr. http://en.wikipedia.org/wiki/Literal...ter_science%29
    Ma che diavolo...?! Si legge chiaramente
    In contrast to literals, variables or constants are symbols that can take on one of a class of fixed values, the constant being constrained not to change. Literals are often used to initialize variables
    In altre parole, i literals non sono altro che i valori di variabili e costanti, cioè il numero che rappresentano: chiamali con il loro nome, invece di creare verbosamente nomi ambigui come "valori magici", quando sono solo dei valori.
    Quarto: tutto questo è Off-Topic e non interessa a nessuno. ernestocampese ha chiesto tutt'altro e aveva già ottenuto una risposta, senza che tu dovessi dargli inutili lezioni ridondanti.
    Detto ciò, io sono qui per aiutare lui e non per rispondere alle tue farneticazioni, quindi da qui in poi risponderò a lui e basta.
    P.S.: Mi sorprende che tu sia Super Moderatore, se non riesci a capire tutto questo da solo, soprattutto l'OT, o le regole valgono solo per noi?

    Chiedo comunque scusa ad ernestocampese per questo post inutile e per la divergenza dall'argomento principale.
    Ultima modifica di gdrfaidate : 14-08-2013 alle ore 13.59.47

  10. #10
    Guest

    Predefinito

    Citazione Originalmente inviato da gdrfaidate Visualizza messaggio
    .....
    Chiedo comunque scusa ad ernestocampese per questo post inutile e per la divergenza dall'argomento principale.
    No tranquillo, nonostante vi fosse una discussione di mezzo, i vostri replay contengono per me ( apprendista ) nozioni utili, insomma tra i due litiganti il terzo gode! ( in questo caso "apprende")

    Allora per quanto riguarda il discorso del "return true", mi preoccupava che magari sarebbe potuto restare sempre true ecc... cose del genere

    Ho letto un pò di documentazione su Mysqli, è davvero una cosa fantastica e ti ringrazio per avermene parlato, molto gentile da parte tua andare oltre le risposte nette, grazie davvero. Comunque sia, leggendo qua e là, ho anche appreso che è ancora un progetto "beta", e si tratta di un’estensione ancora incompleta che al momento non è dato sapere se verrà supportata sufficientemente in futuro! Questa cosa mi frena un po la mano, ma allo stesso momento rosico data la semplicità di questa estensione! Cosa ne pensi tu?

    Grazie per la pazienza!

  11. #11
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,762

    Predefinito

    Citazione Originalmente inviato da ernestocampese Visualizza messaggio
    Comunque sia, leggendo qua e là, ho anche appreso che è ancora un progetto "beta", e si tratta di un’estensione ancora incompleta che al momento non è dato sapere se verrà supportata sufficientemente in futuro! Questa cosa mi frena un po la mano, ma allo stesso momento rosico data la semplicità di questa estensione! Cosa ne pensi tu?
    Probabilmente hai letto un articolo vecchio: quelle informazioni c'erano tempo fa. Ora, deve esser utilizzato mysqli invece di mysql (puoi pure usare PDO). Infatti, se guardi sulla documentazione ufficiale, qualsiasi funzione mysql (ad esempio visto che l'hai usata, la mysql_num_rows()) riporta un bel segnale di pericolo, con una scritta in rosso {su sfondo quasi-rosso ), dicendo che la funzione è deprecata.

    Come livello di "difficoltà", mi sembra di ricordare che la difficoltà di mysql è circa quella di mysqli: l'uso di molte funzioni (parlo in generale) è pressoché identico, e l'uso si distingue "soltanto" (ad alto livello) aggiungendo una "i" dopo mysql.

    Infine, ti consiglio sempre e comunque di prendere le informazioni da fonti ufficiali, e non nei blog e/o per sentito dire: quel passo puoi farlo solo quando la documentazione non ti sembra chiara. In questo modo eviti informazioni sia vecchie, sia errate (può capitare). Inoltre, la documentazione ufficiale molto spesso è più dettagliata degli altri articoli trovati sul web.

    Ciao!
    Ultima modifica di alemoppo : 14-08-2013 alle ore 20.40.41

  12. #12
    Guest

    Predefinito

    Non so dove tu abbia letto che è in beta, ma il manuale di PHP suggerisce il contrario. Andando su Choosing an API, c'è scritto, subito sotto il primo esempio:
    It is recommended to use either the mysqli or PDO_MySQL extensions. It is not recommended to use the old mysql extension for new development, as it has been deprecated as of PHP 5.5.0 and will be removed in the future.
    Quindi direi che è proprio l'opposto! Le funzioni Mysql (mysql_query(), ecc.) sono ormai obsolete (e addirittura verranno eliminate il futuro), soppiantate appunto da Mysqli: è orientato a oggetti (quindi è espansibile) e possiede funzionalità aggiuntive. Puoi trovare tutto quello che lo riguarda qui comunque, se non l'avevi già visto.
    In definitiva: ti consiglio sicuramente Mysqli.
    P.S.: alemoppo, le funzioni aggiungendo la i (come mysqli_query() invece di mysql_query()) sono quelle procedurali, ma è più normale usare quello a oggetti se lui sta già facendo una sua classe. La differenza quindi è che, in generale, all'inizio metterai
    Codice PHP:
    $db = new mysqli("localhost", "user", "password", "database");
    e invece di mysql_ ci metterai $db->, quindi mysql_query diventerebbe $db->query().
    Ultima modifica di gdrfaidate : 14-08-2013 alle ore 20.51.00

  13. #13
    Guest

    Predefinito

    Ottimo! Grazie ad entrambi, l'informazione l'avevo presa da un sito molto famoso. Non so se posso scriverlo, però sappiate che è il primo risultato di google quando scrivete html!

    Grazie mille ancora, alla prossima domanda!

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •