PHP 5.5.16 is released

O que são referências

Referências, em PHP, significa acessar o mesmo conteúdo de variável através de vários nomes. Isto não é parecido com os ponteiros em C; ao invés, aqui temos apelidos numa tabela simbólica. Note que no PHP nomes de variáveis e conteúdo de variável são tratados diferentemente, então um mesmo conteúdo pode ter nomes diferentes. A analogia mais próxima é a dos arquivos e seus nomes em sistemas UNIX: nomes de variáveis são o caminho completo dos arquivos, enquanto o conteúdo da variável são os dados desse arquivo. Assim, referências podem ser tomadas como os links físicos dentro do sistema de arquivos UNIX.

add a note add a note

User Contributed Notes 1 note

up
-3
mike at eastghost dot com
6 months ago
If I make a function, using PHP 5.5.5:
function recurring_mailer_form( $form, $form_state ) {}

Is it the same as:
function recurring_mailer_form( $form,  & $form_state ) {}
?

----------
NO

Using php 5.5.x+

If you pass an object as usual (ie, without the ampersand), you can (only) alter the object's state (properties) (but not change the whole obj into a new obj)

$obj is an instance of the class Test which contains a member variable called hello:

function modify($obj) { $obj->hello = 'world (modified)!'; }

$obj->hello = 'world';
modify($obj);
var_dump($obj->hello);  // outputs "world (modified!)"

----------

Now, using the same code but assigning another value to $obj instead modifying the object's state results in no modification:

function modify($obj) { $obj = 42; }
var_dump($obj->hello);  // outputs "world"

----------

Only accepting the parameter explicitly as a reference gives us the ability to completely change the variable's contents:

function modify(&$obj) { $obj = 42; }
var_dump($obj);         // outputs "42"

----------

http://stackoverflow.com/questions/19847781/do-i-need-to-use-the-ampersand-in-php-5-5-x-and-above-anymore
To Top