- Home
- Categorie
- Coding e Sistemistica
- PHP
- Operatori particolari
-
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!
-
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
-
@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.
-
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
-
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 ioCiao!
-
Ehm si era &nomefunzione
Quanto riguarda il primo caso non penso di aver ben capito
-
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 !
-
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: 10unset($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!
-
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!
-
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 eCiao!