Visualizzazione risultati 1 fino 11 di 11

Discussione: [PHP] Variabili precedute dal simbolo & ( and ) cosa servono o sono?

  1. #1
    Guest

    Predefinito [PHP] Variabili precedute dal simbolo & ( and ) cosa servono o sono?

    Come da titolo, vorrei sapere cosa serve anteporre il smbilo in una variabile:

    Ho trovato questa funzione in un CMS:
    Codice PHP:
    function user_notification($mode, &$post_data, &$topic_title, &$forum_id, &$topic_id)
    {
    #Funzione
    }
    Qualcuno può spiegarmelo per favore? Grazie infinite

  2. #2
    L'avatar di seneca
    seneca non è connesso Super Moderatore
    Data registrazione
    18-12-2004
    Residenza
    la Città Eterna
    Messaggi
    8,376

    Predefinito

    Si riferisce al passaggio di un valore per riferimento invece che per valore.
    Ti ho trovato su google
    >> http://www.codicefacile.it/tutorials..._e_riferimento
    >> http://php.html.it/articoli/leggi/87...ta-di-php-5/2/
    Comunque se cerchi con la key "php passaggio per riferimento" trovi altro materiale, se ti interessa approfondire.

    ps: naturalmente & non è da intendersi come and logico.


    -- Aut Roma Aut Nihil!

  3. #3
    programmazioned non è connesso Utente attivo
    Data registrazione
    25-03-2008
    Messaggi
    440

    Predefinito

    Si tratta dell'operatore di referenza.
    Normalmente quando invochi una funzione passando alla stessa dei parametri attuali, il valore di questi ultimi viene copiato all'interno della stessa.
    Utilizzando il passaggio per referenza, invece, viene passato l'indirizzo di memoria che contiene la variabile.
    Questa tecnica viene spesso utilizzata quando si ha a che fare con variabili che contengono dati particolarmente pesanti (tipo array di migliaia di elementi) per non peggiorare troppo le prestazioni.
    Ti faccio un esempio di uso, per farti capire la differenza:
    Codice PHP:
    function incrementaPerValore($numero){
    $numero++;
    return
    $numero;
    }
    function
    incrementaPerReferenza(&$numero){
    $numero++;
    }
    Codice PHP:
    $numero = 2;
    incrementaPerReferenza($numero);
    echo
    $numero; // stampa 3
    Codice PHP:
    $numero = 2;
    $nuovo = incrementaPerValore($numero);
    echo
    $numero; // stampa 2
    echo $nuovo // stampa 3
    Ciao!

    P.S: Se hai ancora poco chiari questi concetti prova a leggere qualcosa sui puntatori in C/C++, nonostante non si tratti di php lì troverai spiegazioni di sicuro più chiare e complete almeno a livello teorico, essendo argomenti basilari del linguaggio.
    Ultima modifica di programmazioned : 10-04-2009 alle ore 00.16.44 Motivo: Tardi, ma ho aggiunto qualcosa :)

  4. #4
    Guest

    Predefinito

    In pratica l'operatore & passa i dati senza che php li copi in memoria per poterli utilizzare localmente nella funzione

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

    Predefinito

    Ciao!.

    Ma in php esiste solo '&' ?? e '*' ??

    Cioé: in C '&' rappresenta l'indirizzo e '*' il valore puntato.
    In php basta che mettiamo la & e lui capisce da solo???

    Ciao!

    EDIT:
    Cioé:
    Codice PHP:
    &p = variabile; //capisce da solo che voglio il suo indirizzo???
    p=variabile; //capisce da solo che voglio il suo valore???
    Grazie,

    Ciao!
    Ultima modifica di alemoppo : 11-04-2009 alle ore 10.34.53

  6. #6
    Guest

    Predefinito

    Non ci ho capito moltissimo Scusatemi

    Ho cercato in internet i puntatori in C, ma sempre ho capito pochissimo cioè, che questo fa risparmiare abbastanza risorse, come detto anche da programmazioned, perchè prende il dato in memoria.

    Però non ho capito, quest'indirizzo, è l'indirizzo del valore in memoria?

    La memoria è specie di cache, che mettendo prima della variabile/funzione il simbolo &, viene richiamato il valore cercato, al posto di "ricrearlo"?

    Scusate se sono duro di comprendonio, ma vorrei anche capire se mi serve pe/o nel caso utilizzarlo in altre occasioni.


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

    Predefinito

    Allora. Cerco di spiegartelo [più sul lato C che sul lato PHP, perché sul php i puntatori non li ho mai usati ] (e non credo siano indispensabili!).

    In C, l'esempio classico di uso di puntatori è nel fare una funzione che scambi i valori di due variabili:

    Codice PHP:
    funzione()
    {
    a=8;
    b=3;
    scambia(a,b);
    /*
    *SENZA fare alcun return, da adesso in poi:
    *a varrà 3
    *e
    *b varrà 8
    *perché ho cambiato i valori dai loro indirizzi di memoria!
    */
    }
    scambia(&a,&b) //sto cercando di scriverlo in php, ma non so se ci riesco bene :(
    {
    temp = a;
    a=b;
    b=temp;
    }
    spero di on aver fatto errori, perché da come ho detto in php non li ho mai usati

    Quindi, sono molto utili quando da una funzione devi tirare fuori più di un valore: se ne devi tirare fuori 1, puoi usare beniissimo il return; invece, se le 'uscite' sono più di una, devi per forza usare queste cose.
    Ultima modifica di alemoppo : 11-04-2009 alle ore 11.29.27

  8. #8
    programmazioned non è connesso Utente attivo
    Data registrazione
    25-03-2008
    Messaggi
    440

    Predefinito

    Allora. Cerco di spiegartelo [più sul lato C che sul lato PHP, perché sul php i puntatori non li ho mai usati ] (e non credo siano indispensabili!).
    Infatti, in php non si usano quasi mai.
    Soltanto a volte quando si passano dati molto grandi.

    In C, l'esempio classico di uso di puntatori è nel fare una funzione che scambi i valori di due variabili:
    Ti sistemo lo script in PHP ;)
    Codice PHP:
    function funzione()
    {
    $a=8;
    $b=3;
    scambia($a,$b);
    /*
    *SENZA fare alcun return, da adesso in poi:
    *a varrà 3
    *e
    *b varrà 8
    *perché ho cambiato i valori dai loro indirizzi di memoria!
    */
    }
    function
    scambia($a,$b)
    {
    $temp = $a;
    $a = $b;
    $b = $temp;
    }
    Quindi, sono molto utili quando da una funzione devi tirare fuori più di un valore: se ne devi tirare fuori 1, puoi usare beniissimo il return; invece, se le 'uscite' sono più di una, devi per forza usare queste cose.
    Su questo non sono d'accordo, spesso si usa anche far tornare alla funzione un array che ha per elementi i vari valori utili per il programma chiamante. Questo si può fare pure in c, ma è particolarmente comodo in PHP per la facilità nell'uso di un hash table/array associativo.
    Ciao!
    Ultima modifica di programmazioned : 11-04-2009 alle ore 13.54.47

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

    Predefinito

    Scusate mi sbaglio spesso in php a non mettere il simbolo di dollaro: non sono abituato

    Comunque una cosetta: anche in php gli elementi degli array sono in posizioni successive? cioé con l'indirizzo del primo elemento, posso averli tutti??


    @bicheddu:

    Allora. Tu hai una variabile.
    Questa variabile contiene un qualcosa (numero, ...).
    Questa variabile, però, avrà un indirizzo nella memoria(RAM); quando te richiami una variabile normalmente, la CPU trova il suo valore tramite l'indirizzo

    Se nel caso precedente non avessi usato i puntatori, le due variabili non abrebbero scambiato il loro valore: infatti, tu alla funzione scambia gli hai inviato l'indirizzo, quindi all'interno della funzione vai a modificare la variabile originaria..

    Un pò più chiaro??

    ...non sono tanto bravo a spiegare

    Ciao!

  10. #10
    Guest

    Predefinito

    Ok, credo di aver capito, in caso contrario poterò qui

    Grazie a tutti per le delucidazioni

  11. #11
    Guest

    Predefinito

    Ragazzi, ritiro su il topic per due domande.

    Allora, sto lavorando con le classi quindi le funzioni e vorrei sapere quando/dove utilizzare questo operatore di referenza.

    Io ho:
    Codice PHP:
    $var = $class->funct($funct_var);
    function, nella classe, sarà così:
    Codice PHP:
    function funct($var)
    {
    echo
    $var;
    }
    Ora vi chiedo, quando utilizzare & prima della variabile? Nella funzione o quando la passa alla funzione? Così:

    Codice PHP:
    function funct(&$var)
    {
    echo
    $var;
    }

    $var = $class->funct($funct_var);
    oppure:
    Codice PHP:
    function funct($var)
    {
    echo
    $var;
    }

    $var = $class->funct(&$funct_var);
    o ancora, in tutti e due:
    Codice PHP:
    function funct(&$var)
    {
    echo
    $var;
    }

    $var = $class->funct(&$funct_var);
    Questa era la prima, poi chiedo, che tipo di variabili devo passare? Posso utilizzarlo con qualsiasi variabile valorizzata anche con un $_SERVER o $_POST?

    Grazie ancora per le delucidazioni

Regole di scrittura

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