Referências ou Ponteiros em PHP?
Você pode passar variáveis para funções por referência, então a função poderá modificar seus argumentos. A sintaxe é a seguinte:
<?php
function foo (&$var)
{
$var++;
}
$a=5;
foo ($a);
// $a é 6 aqui
?>
Note que não há o sinal de referência na chamada da função, somente na definição da função. A marcação na definição da função sozinha é suficiente para configurar corretamente a passagem de argumentos por referência.
As coisas a seguir podem ser passadas por referência:
Variáveis. Exemplo: foo($a)
Instrução new. Exemplo foo(new foobar())
Outra referência, retornada de uma função. Exemplo:
<?php
function &bar()
{
$a = 5;
return $a;
}
foo(bar());
?>
Nenhuma outra expressão poderá ser passada por referência, com resultados indefinidos. Por exemplo, o exemplo seguinte de passagem por referência é inválido:
<?php
function bar() // Note a falta do &
{
$a = 5;
return $a;
}
foo(bar());
foo($a = 5) // Expressão, não é variável
foo(5) // Constante, não é variável
?>
Essas limitações valem para o PHP 4.0.4 em diante.
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"