Além de ser um “recipiente” para os dados, as variáveis do PHP tem algumas outras características que serão examinados neste capítulo. Estas são características que não são comumente usados, mas são bons para conhecer.
Variáveis entre chaves
Um nome de variável pode ser especificado explicitamente colocando-o entre chaves. Isto é conhecido como “sintaxe encaracolado”(curly), ou complexo. Para ilustrar, o seguinte código irá imprimir a variável mesmo que aparece no meio de uma palavra.
<?php $fruit = 'Apple'; echo "Two {$fruit}s"; // "Two Apples"
Mais importante ainda, a sintaxe entre chaves é útil para formar os nomes das variáveis de expressões. Considere o seguinte código que usa a sintaxe entre chaves para construir nomes para três variáveis.
<?php for ($i = 1; $i <= 3; $i++) ${'x'.$i} = $i; echo "$x1 $x2 $x3"; // "1 2 3"
A sintaxe entre chaves é necessária aqui, porque a expressão precisa ser avaliada, a fim de formar um nome de variável válido. Se a expressão tem apenas uma única variável as chaves não são necessários.
<?php for ($i = 'a'; $i <= 'c'; $i++) $$i = $i; echo "$a $b $c"; // "a b c"
Esta sintaxe é conhecido como uma variável variável em PHP.
“Variáveis variáveis”
Uma “variável variável” é uma variável cujo nome pode ser alterado por meio de código. Como exemplo, considere o seguinte variável regular.
$a = ‘foo’;
O valor dessa variável pode ser usado como um nome de variável, colocando um sinal de dólar adicional antes.
$$a = ‘bar’;
O valor de $a, o que é “foo”, agora se torna um nome alternativo para a variável $$a.
echo $foo; // “bar”
echo $$a; // “bar”
Um exemplo de uso para isso seria para gerar variáveis de uma matriz.
<?php $arr = array('a' => 'Foo', 'b' => 'Bar'); foreach ($arr as $key => $value){ $$key = $value; } echo "$a $b"; // "Foo Bar"
Nomes de funções variáveis
Ao colocar parênteses após uma variável seu valor será avaliado como o nome para a função.
<?php function myPrint($s) { echo $s; } $func = 'myPrint'; $func('Hello'); // "Hello"
Este comportamento não vai trabalhar com construções de linguagem embutidos, tais como eco.
echo('Hello'); // "Hello" $func = 'echo'; $func('Hello'); // error
Nomes de classe variáveis
Semelhante a função nomes de variáveis, as aulas podem ser referenciados usando variáveis de cadeia. Esta funcionalidade foi introduzida no PHP 5.3.
class MyClass {} $classname = 'MyClass'; $obj = new $classname();
O mecanismo de acesso a entidades de código via strings e variáveis de cadeia também funciona para membros de uma classe ou instância.
<?php class MyClass { public $myProperty = 10; } $obj = new MyClass(); echo $obj->{'myProperty'}; // "10"