2010-07-15 16 views
19

Che cosa significa il & prima del nome della funzione?Cosa significa e prima che il nome della funzione significhi?

Ciò significa che lo $result viene restituito per riferimento anziché per valore? Se sì, allora è corretto? Ricordo che non è possibile restituire un riferimento a una variabile locale che svanisce quando si esce dalla funzione.

function &query($sql) { 
// ... 
$result = mysql_query($sql); 
return $result; 
} 

anche da dove viene tale sintassi abitua in pratica?

risposta

7

Ciò significa che lo $result viene restituito per riferimento anziché per valore?

Sì.

Anche dove viene utilizzata tale sintassi nella pratica ?

Questo è più diffuso in PHP 4 script in cui gli oggetti sono stati passati in giro per valore per impostazione predefinita.

+0

-1 per indicare che $ result esiste solo all'interno della funzione e sarebbe quindi inutile. – NikiC

+0

@nikic: ho rispedito la risposta. – BoltClock

+0

Ok. Così ora do -1 per aver detto che gli oggetti non sono più passati di valore in PHP 5 ... – NikiC

6

Per rispondere alla seconda parte della tua domanda, qui un posto lì dovevo usarlo: Getter magici!

class FooBar { 
    private $properties = array(); 

    public function &__get($name) { 
     return $this->properties[$name]; 
    } 

    public function __set($name, $value) { 
     $this->properties[$name] = $value; 
    } 
} 

Se non avessi usato & là, questo non sarebbe possibile:

$foobar = new FooBar; 
$foobar->subArray = array(); 
$foobar->subArray['FooBar'] = 'Hallo World!'; 

Invece PHP sarebbe gettato un errore che dice qualcosa del tipo 'non può modificare indirettamente proprietà sovraccarico'.

Ok, questo è probabilmente solo un trucco per aggirare alcuni maldesign in PHP, ma è comunque utile.

Ma sinceramente, non posso pensare al momento di un altro esempio. Ma scommetto che ci sono alcuni rari casi d'uso ...

4

Ciò significa che lo $result viene restituito per riferimento anziché per valore?

No. La differenza è che è possibile restituire per riferimento. Per esempio:

<?php 
function &a(&$c) { 
    return $c; 
} 
$c = 1; 
$d = a($c); 
$d++; 
echo $c; //echoes 1, not 2! 

Per tornare con riferimento dovreste fare:

<?php 
function &a(&$c) { 
    return $c; 
} 
$c = 1; 
$d = &a($c); 
$d++; 
echo $c; //echoes 2 

anche da dove viene tale sintassi abituarsi a pratica?

In pratica, si utilizza ogni volta che si desidera che il chiamante della propria funzione manipoli i dati di proprietà del destinatario senza dirglielo. Questo è usato raramente perché è una violazione dell'incapsulamento: è possibile impostare il riferimento restituito a qualsiasi valore desiderato; il callee non sarà in grado di convalidarlo.

nikic fornisce un ottimo esempio di quando viene utilizzato nella pratica.

+0

Se la funzione non è definita con & prima del nome della funzione, è ancora possibile restituire la variabile con riferimento anziché valore? –

+0

@KorayTugay n. – Artefacto

Problemi correlati