• Super User

    Operatori particolari

    Salve a tutti! 😄

    Domanda semplice:
    A cosa servono questi operatori e come vengono descritti?

    • =&
    • @ <- davanti ad un metodo tipo @mysql_connect(...,...,...)
    • <> (nn ho capito se è maggiore e minore di N o è simile a ! e cioè NOT)Ce ne sono altri appena li trovo e ho dei dubbi ve li inserisco :ciauz:

  • User Attivo

    L'operatore =& viene chiamato "riferimento" in quanto permette di creare più variabile che fanno riferimento allo stesso contenuto. (Es $a =& $b)
    In altre parole si creano variabile $a e $b che contengono lo stesso oggetto e a differenza di C, $b non è un puntatore a $a, ma sono due elementi indipendenti.

    L'operatore @ è un silenziatore, un operatore in grado di "nascondere" i meggaggi di avvertimento di PHP.
    Le funzioni come $_GET, $_POST, ecc... che se invocate senza i giusti parametri danno un messaggio di errore, se precedute dall'operatore @ non mostrano più niente. (Es. $test = @$_GET["test"]; )

    L'operatore <> ha la funzione di controllare la diversità di due valori.
    <> è tipicamente utilizzato in Visual Basic, mentre in C/C++ e anche in PHP viene utilizzato != che indica la stessa funzione ( $a <> $b è uguale a $a != $b)

    Ciao!


  • Super User

    Grazie per la risposta !

    Quindi se io dico:

    [PHP]$variabile =& mysql_query($query);[/PHP]

    Non solo creo una variabile $variabile avente valore ricevuto in questo caso dal metodo di mysql_query , ma invierò anche la stessa query ?

    MHHhhhhh 😐


  • User Attivo

    @karedas said:

    Quindi se io dico:

    [php]$variabile =& mysql_query($query);[/php]Non solo creo una variabile $variabile avente valore ricevuto in questo caso dal metodo di mysql_query , ma invierò anche la stessa query ?

    Si, alla variabile $variabile viene associato il risultato del metodo mysql_query(); dove è stato impostato $query come argomento.
    La stessa cosa avviene anche con "=" singolo.


  • Super User

    Ok te ne inoltro degli altri:

    &$variabile;
    function **$**nomefunzione(){...}

    Il secondo caso ho un'idea un pò blasfema di cosa esso voglia dire se mi potete illuminare mi fate un piacere 😄


  • User Attivo

    La & davanti alla variabile indica che quest'ultima ha un valore passato per riferimento, cioè un puntatore alla memoria dove risiede il valore vero e proprio.
    Invece per le funzioni **$**nomefunzione(), non credo di averle mai viste, forse ti sei sbagliato con queste **&**nomefunzione(), forse mi sbaglio io 😄

    Ciao!


  • Super User

    Ehm si era &nomefunzione 😄

    Quanto riguarda il primo caso non penso di aver ben capito 😐


  • Super User

    Mh reinoltro il mio dubbio su &nomefunzione(){}

    Ho trovato anche casi come:

    [PHP]
    class prova(){
    function &nomefunzione(){
    }
    }
    [/PHP]

    E per richiamare la funzione da un file esterno veniva usato il medesimo operatore come in questo caso:

    $variabile =& nomeclasse::nomefunzione();

    Non ho capito se ha una qualche relazione o meno comunque aspetto e spero !


  • User Attivo

    PHP vs Riferimenti

    Se prendo due variabili $a e $b:

    [php]
    $b = 5;
    $a = $b;

    echo $a; //Ris: 5
    echo $b; //Ris: 5
    [/php]$a ed $b sono due variabili indipendenti, in questo caso, entrambe assumono il valore 5.
    Se durante l'esecuzione modifico $a, viene:

    [php]
    $b = 5;
    $a = $b;

    echo $a; //Ris: 5

    $a = 6;

    echo $a; //Ris: 6
    echo $b; //Ris: 5
    [/php]Si nota subito che le due variabile anche se vengono ugualiate e contengono gli stessi valori ($a = $b) sono due oggetti indipendenti.
    Questo è una normale gestione delle variabili in PHP.
    Con l'uso dei riferimenti, invece non succede più così.
    Quando si precende il nome di una variabile con il simbolo &, non si ottiene più il valore della variabile, ma un riferimento ad essa, l'equivalente dei puntatori in C.
    Con i riferimenti, una variabile diventa un alias di un'altra variabile ($a è l'alias di $b, oppure $a punta a $b).

    [php]
    $b = 5;
    $a =& $b; //Altra Sintassi: $a = & $b;
    [/php]Ora le due variabili $a e $b condividono lo stesso spazio di memoria, quindi un cambiamento al valore dell'una si riflette sul valore dell'altra.

    [php]
    $b = 5;
    $a =& $b;

    echo $a; //Ris: 5
    echo $b; //Ris: 5

    $a = 10;

    echo $a; //Ris: 10
    echo $b; //Ris: 10
    [/php]Il concetto di fondo è quello di chiamare lo stesso oggetto variabile con due nomi differenti.

    Per eliminire un alias di un oggetto, si usa la funzione unset();

    [php]
    $b = 5;
    $a =& $b;

    echo $a; //Ris: 5
    echo $b; //Ris: 5

    $a = 10;
    echo $a; //Ris: 10
    echo $b; //Ris: 10

    unset($b);
    echo $a; //Ris: 10
    echo $b; //Ris: VARIABILE NON DEFINITA
    [/php]L'utilità dei riferimenti si vede nell'utilizzo di funzioni.
    Passare un riferimento di una variabile come argomento della funzione è molto più veloce e permette di allocare meno spazio in memoria rispetto alla normale copia della variabile.

    [php]
    function funzione(&$valore)
    {
    $valore += 5;
    }

    $a = 10;
    funzione($a);

    echo $a; //Ris: 15
    [/php]Di conseguenza, anche una funzione può restituire un puntatore ad una variabile.

    [php]
    function &funzione()
    {
    static $valore = 0; //STATIC: $valore ha visibilità (può essere usata) solo all'interno della funzione
    $valore++;
    return $valore;
    }

    echo funzione(); //Ris: 1
    echo funzione(); //Ris: 2
    echo funzione(); //Ris: 3

    $a =& funzione();
    $a = 10;

    echo funzione(); //Ris: 11
    [/php]
    Spero di esserti stato utile 😄 🙂
    Ciao! :ciauz:


  • Super User

    Ti ringrazio per la lunga spiegazione mi hai chiarito le idee! 😄

    Ho un altro dubbio che ho riscontrato mentre lavoravo.
    L'esempio è questo:

    [php]
    foreach($array as $val=>$altroVal){
    //istruzioni
    }
    [/php]Ecco come viene interpretato questo foreach con quell'operatore?
    Da come ho capito io oltre ad affibiare il singolo valore dell'array ad una variabile (nel nostro caso $altroVal) la identifico su un array ulteriore con valore numerico?

    Se ho quindi $array di questo tipo: $array("abc","defg","hilm");
    Allora $val sarà così? $val[0,1,2]
    O anche così $val [0=>"abc", 1=>"defg",2=>"hilm");

    Spero di aver azzeccato. 😄
    Grazie anticipatamente!


  • User Attivo

    Con il foreach si scansiona facilmente ed in sequenzialmente il contenuto di un array.
    In questo caso, l'elemento "letto" in $array viene salvato all'interno di $altroVal, mentre la posizione di quest'ultimo viene salvata all'interno di $val.

    Esempio
    [php]
    $array = array("a","b","c","d","e");
    foreach($array as $indice=>$valore)
    {
    echo "INDICE: $indice = VALORE $valore<br>";
    }
    [/php]Il risultato sarà:

    INDICE: 0 = VALORE a
    INDICE: 1 = VALORE b
    INDICE: 2 = VALORE c
    INDICE: 3 = VALORE d
    INDICE: 4 = VALORE e

    Ciao!