Referências ou Ponteiros em PHP?
O retorno por referência é útil quando você precisa utilizar uma função para localizar variável cuja referência precisa ser obtida. Para retornar referências, utilize esta sintaxe:
Neste exemplo, a propriedade do objeto retornado pela função procura_var precissa ser assimilada, não copiada, como acontecerá se não utilizar a sintaxe de referências.
Nota: Diferentemente da passagem de parâmetros por referência, aqui você precisa utilizar & em ambos os lugares --- primeiro para indicar o retorno por referência (e não a cópia), e depois para indicar a ligação da referência (em vez da assimilação convencional) que precisa ser explícita.
- Destruindo Referências:
Quando você quebra uma referência, ela apenas pára de fazer o apontamento entre o nome da variável e o conteúdo. Mas isto não significa que o conteúdo da variável será destruído. Por exemplo:
Isso não apaga $b, apenas $a.
Novamente, é mais fácil pensar em analogia ao comando UNIX like unlink ou rm.
<?php function &procura_var ($param) { ...codigo... return $variavel_encontrada; } $foo =& procura_var ($bar); $foo->x = 2; ?>
Neste exemplo, a propriedade do objeto retornado pela função procura_var precissa ser assimilada, não copiada, como acontecerá se não utilizar a sintaxe de referências.
Nota: Diferentemente da passagem de parâmetros por referência, aqui você precisa utilizar & em ambos os lugares --- primeiro para indicar o retorno por referência (e não a cópia), e depois para indicar a ligação da referência (em vez da assimilação convencional) que precisa ser explícita.
- Destruindo Referências:
Quando você quebra uma referência, ela apenas pára de fazer o apontamento entre o nome da variável e o conteúdo. Mas isto não significa que o conteúdo da variável será destruído. Por exemplo:
<?php $a = 1; $b =& $a; unset ($a); ?>
Isso não apaga $b, apenas $a.
Novamente, é mais fácil pensar em analogia ao comando UNIX like unlink ou rm.
Na boa qdo utilizar material de qualquer lugar, seria bom vc colocar a referencia. Lembre-se que outras pessoas tiveram trabalho para escrever e assim merecem nosso reconhecimento e gratidão.
http://www.iar.unicamp.br/suporte/php/language.references.whatdo.html
http://www.iar.unicamp.br/suporte/php/language.references.whatdo.html
06/12/2003 10:02pm
(~21 anos atrás)
Geralmente, quando se envia dados via formulários, existe a pretenção de usar todos os valores de todos os campos, certo?!
Considerando "register_globals = Off".
Uma opção boa seria a função import_request_variables().
Ela recebe dois argumentos. O primeiro define que tipo de variável de requisição importar (G = GET, P = POST e C = COOKIE) e o segundo seria um prefixo.
Exemplo:
Considere dois campos no formulário usando método GET: campo "email" e campo "senha".
Quando enviado para o PHP eles chegarão como:
> $_GET["email"]
> $_GET["senha"]
se na primeira linha do PHP você colocar:
> import_request_variables("G", "f_");
Passarão a existir as seguintes variáveis:
> $f_email
> $f_senha
Observação: O segundo argumento poderia ser deixado em branco e assim seriam criadas váriaveis:
> $email
> $senha
------------------------------
Falei alguma novidade? Ajudei? :)
Abraços!
Daniel.
[obs.: Meu primeiro comentário, peguem leve ... hehehe]
Considerando "register_globals = Off".
Uma opção boa seria a função import_request_variables().
Ela recebe dois argumentos. O primeiro define que tipo de variável de requisição importar (G = GET, P = POST e C = COOKIE) e o segundo seria um prefixo.
Exemplo:
Considere dois campos no formulário usando método GET: campo "email" e campo "senha".
Quando enviado para o PHP eles chegarão como:
> $_GET["email"]
> $_GET["senha"]
se na primeira linha do PHP você colocar:
> import_request_variables("G", "f_");
Passarão a existir as seguintes variáveis:
> $f_email
> $f_senha
Observação: O segundo argumento poderia ser deixado em branco e assim seriam criadas váriaveis:
> $senha
------------------------------
Falei alguma novidade? Ajudei? :)
Abraços!
Daniel.
[obs.: Meu primeiro comentário, peguem leve ... hehehe]
26/11/2003 3:07pm
(~21 anos atrás)
Opa
Cara... Tudo isso que eu disse está na documentação do PHP, então sinta-se a vontade para publicar seu artigo =]
[]`s
Ragen
Cara... Tudo isso que eu disse está na documentação do PHP, então sinta-se a vontade para publicar seu artigo =]
[]`s
Ragen
18/11/2003 7:37am
(~21 anos atrás)
Bom, colocarei os dois exemplos e o link deste artigo no meu artigo sobre o assunto
e os devidos agradecimentos
sobre a referência no vetor foi fantástica a idéia :)
darei os créditos claro a ti..
Abraços,
fico no aguardo da permissão de vcs (ragen e silvano)
e os devidos agradecimentos
sobre a referência no vetor foi fantástica a idéia :)
darei os créditos claro a ti..
Abraços,
fico no aguardo da permissão de vcs (ragen e silvano)
17/11/2003 8:18pm
(~21 anos atrás)
Você diz
register_globals=on
?
Se a guente for pensar em 2 ou 3 variaveis globais o consumo de memória é quase insignificante, mas por outro lado se for uma manipulaçao de milhares de variaveis? Se você pudesse reduzir pelo menos 20% delas usando referências já seria uma grande economia...
Mas geralmente você irá precisar de referencias se você estiver trabalhando com classes (Como citado no artigo).
[]`s
Ragen
register_globals=on
?
Se a guente for pensar em 2 ou 3 variaveis globais o consumo de memória é quase insignificante, mas por outro lado se for uma manipulaçao de milhares de variaveis? Se você pudesse reduzir pelo menos 20% delas usando referências já seria uma grande economia...
Mas geralmente você irá precisar de referencias se você estiver trabalhando com classes (Como citado no artigo).
[]`s
Ragen
17/11/2003 1:33pm
(~21 anos atrás)
Cara... Não testei ainda
Mas seria algo tipo:
foreach ($_GET AS &$campo => &$valor) {
${$campo} = $valor;
}
Mas seria algo tipo:
foreach ($_GET AS &$campo => &$valor) {
${$campo} = $valor;
}
17/11/2003 1:25pm
(~21 anos atrás)
Que bela bobagem acabei de escrever.
Perdão.
E...
'Uma saida seria
$a = &$_GET['foo'];
$$a = 'lalala';'
Aqui você não estaria criando uma nova variável também?
E Ragen, que saída você vê para não precisar se preocupar com o register_globals, sem ter consumo extra de memória?
[z]
Perdão.
E...
'Uma saida seria
$a = &$_GET['foo'];
$$a = 'lalala';'
Aqui você não estaria criando uma nova variável também?
E Ragen, que saída você vê para não precisar se preocupar com o register_globals, sem ter consumo extra de memória?
[z]
17/11/2003 1:24pm
(~21 anos atrás)
foreach ($_GET AS $campo => $valor) {
&${$campo} = $valor;
}
? heh
[z]
&${$campo} = $valor;
}
? heh
[z]
17/11/2003 1:19pm
(~21 anos atrás)
Acho que você não leu todo o artigo, na última página está escrito:
Fonte: "Manual do PHP"