2010-01-17 17 views
15

Considerare:Cosa significa = e significa in PHP?

$smarty =& SESmarty::getInstance(); 

Qual è la & per?

+2

Se avete bisogno di qualcosa di simile nella ricerca futura di "operatori" nei riferimenti di aiuto di PHP, o un buon motore di ricerca. –

+1

Si dovrebbe anche cercare qualcosa chiamato "Singleton". – cwallenpoole

risposta

24

Passa per riferimento. Significa che non creerà una copia del valore passato.

See: http://php.net/manual/en/language.references.php (vedi risposta di Adamo)

Di solito, se si passa qualcosa di simile:

$a = 5; 
$b = $a; 
$b = 3; 

echo $a; // 5 
echo $b; // 3 

La variabile originale ($a) non verrà modificato se si modifica la seconda variabile ($b). Se si passa per riferimento:

$a = 5; 
$b =& $a; 
$b = 3; 

echo $a; // 3 
echo $b; // 3 

Anche l'originale viene modificato.

Quale è inutile quando si passa intorno agli oggetti, perché verranno passati per riferimento per impostazione predefinita.

+5

Gli oggetti PHP5 non * sono * passati per riferimento per impostazione predefinita: piuttosto, un identificatore di oggetto viene passato per valore (simile alla semantica di 'riferimento' di Java); vedere il manuale per i dettagli: http://www.php.net/manual/en/language.oop5.references.php – Christoph

+0

Grazie, sembra quasi inutile per me adesso – JasonDavis

+0

È davvero un po 'inutile. Il motivo principale per cui le persone li usavano era non richiedere una funzione per restituire una variabile, ma invece basta modificare la variabile. –

5

In PHP   4, tipo di (a caso) associate due variabili.

$j = 'original'; 
$i =& $j; 
$i = 'modified'; 
echo $j; // The output is 'modified' 

Allo stesso modo ...

$j = 'original'; 
$i =& $j; 
$j = 'modified'; 
echo $i; // The output is 'modified' 

Alcune di queste è stato fatto un po 'meno sgradevole quando si tratta di oggetti in PHP 5, ma penso che il cuore è lo stesso, in modo da questi esempi dovrebbero essere ancora valido

1

References vengono utilizzati per creare alias di variabili ed è necessario utilizzare il vecchio sistema di oggetti in modo efficiente.

In PHP   4, gli oggetti si sono comportati come qualsiasi altro tipo di valore, vale a dire che l'assegnazione creerebbe una copia dell'oggetto. Se si desidera evitare ciò, è necessario utilizzare un riferimento come nel codice di esempio.

Con PHP 5, le variabili oggetto non contengono più l'oggetto stesso, ma un handle (identificatore oggetto AKA) e l'assegnazione copierà solo l'handle. L'utilizzo di un riferimento non è più necessario.