variavel - tipos de variaveis php




Usando chaves com nomes de variáveis dinâmicas em PHP (6)

Eu estou tentando usar nomes de variáveis ​​dinâmicas (não sei ao certo o que eles são chamados) Mas muito parecido com isto:

for($i=0; $i<=2; $i++) {
    $("file" . $i) = file($filelist[$i]);
}

var_dump($file0);

O retorno é null que me diz que não está funcionando. Eu não tenho ideia do que a sintaxe ou a técnica que estou procurando está aqui, o que dificulta a pesquisa. $filelist é definido anteriormente.


visão global

No PHP, você pode simplesmente colocar um $ extra na frente de uma variável para torná-la uma variável dinâmica:

$$variableName = $value;

Embora eu não recomende, você pode até encadear esse comportamento:

$$$$$$$$DoNotTryThisAtHomeKids = $value;

Você pode, mas não é forçado a colocar $variableName entre {} :

${$variableName} = $value;

O uso de {} é obrigatório apenas quando o nome da sua variável é uma composição de vários valores, como este:

${$variableNamePart1 . $variableNamePart2} = $value;

No entanto, é recomendável usar sempre {} , porque é mais legível.

Diferenças entre PHP5 e PHP7

Outra razão para usar sempre {} é que o PHP5 e o PHP7 têm uma maneira ligeiramente diferente de lidar com variáveis ​​dinâmicas, o que resulta em um resultado diferente em alguns casos.

No PHP7, variáveis ​​dinâmicas, propriedades e métodos serão agora avaliados estritamente na ordem da esquerda para a direita, ao contrário do mix de casos especiais no PHP5. Os exemplos abaixo mostram como a ordem de avaliação foi alterada.

Caso 1: $$foo['bar']['baz']

  • Interpretação PHP5: ${$foo['bar']['baz']}
  • Interpretação do PHP7: ${$foo}['bar']['baz']

Caso 2: $foo->$bar['baz']

  • Interpretação PHP5: $foo->{$bar['baz']}
  • Interpretação PHP7: $foo->{$bar}['baz']

Caso 3: $foo->$bar['baz']()

  • Interpretação PHP5: $foo->{$bar['baz']}()
  • Interpretação PHP7: $foo->{$bar}['baz']()

Caso 4: Foo::$bar['baz']()

  • Interpretação PHP5: Foo::{$bar['baz']}()
  • Interpretação do PHP7: Foo::{$bar}['baz']()

Envolva-os em {} :

${"file" . $i} = file($filelist[$i]);

Exemplo de trabalho

Usar ${} é uma maneira de criar variáveis ​​dinâmicas, exemplo simples:

${'a' . 'b'} = 'hello there';
echo $ab; // hello there

Eu faço isso com bastante frequência em resultados retornados de uma consulta.

por exemplo

// $MyQueryResult is an array of results from a query

foreach ($MyQueryResult as $key=>$value)
{
   ${$key}=$value;
}

Agora eu posso usar apenas $ MyFieldname (que é mais fácil em instruções echo etc) em vez de $ MyQueryResult ['MyFieldname']

Sim, é provavelmente preguiçoso, mas nunca tive problemas.


Eu tenho uma solução para o valor da variável criada dinamicamente e combinado todo o valor em uma variável.

if($_SERVER['REQUEST_METHOD']=='POST'){
    $r=0;
    for($i=1; $i<=4; $i++){
        $a = $_POST['a'.$i];
        $r .= $a;
    }
    echo $r;
}

Tente usar {} em vez de ():

${"file".$i} = file($filelist[$i]);

Tom, se você tem uma matriz existente, você pode converter essa matriz para objeto e usá-lo assim:

$r = (object) $MyQueryResult;
echo $r->key;






dynamic-variables