Pergunta

Com o PHP5 usando "Copy on Write" e passando por referência, causando mais uma penalidade de desempenho do que um ganho, por que devo usar a referência passada? Além das funções de devolução que retornariam mais de um valor ou classes cujos atributos você deseja ser alterável sem chamar uma função definida mais tarde (prática ruim, eu sei), há um uso para isso que estou perdendo?

Foi útil?

Solução

Você usa a referência passada quando deseja modificar o resultado e isso é tudo o que existe.

Lembre -se também de que em objetos PHP são sempre passada por referência.

Pessoalmente, encontro o sistema PHP de copiar valores implicitamente (acho que se defender contra a modificação acidental) complicada e não intuitiva, mas, novamente, comecei em idiomas fortemente digitados, o que provavelmente explica isso. Mas acho interessante que os objetos diferem da operação normal do PHP e tomo como evidência de que o mecanismo de cópia implícito do PHP "realmente não é um bom sistema.

Outras dicas

Uma função recursiva que preenche uma matriz? Lembre -se de escrever algo assim, uma vez.

Não faz sentido ter centenas de cópias de uma matriz parcialmente cheia e copiando, ceder e unindo peças a cada passo.

Mesmo ao passar os objetos, há uma diferença.

Experimente este exemplo:

class Penguin { }

$a = new Penguin();

function one($a)
{
  $a = null;
}

function two(&$a)
{
  $a = null;
}

var_dump($a);
one($a);
var_dump($a);
two($a);
var_dump($a);

O resultado será:

object(Penguin)#1 (0) {}
object(Penguin)#1 (0) {}
NULL

Quando você passa uma variável contendo uma referência a um objeto por referência, você pode modificar a referência ao objeto.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top