1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191
|
<?xml version="1.0" encoding="iso-8859-1"?>
<chapter id="language.expressions">
<title>Expresses</title>
<simpara>
Expresses so as peas de construo mais importantes do PHP. Em PHP,
quase tudo o que voc escreve so expresses. A maneira mais simples e ainda
mais precisa de definir uma expresso " tudo o que tem um valor".</simpara>
<simpara>
As formas mais bsicas de expresses so constantes e variveis. Quando voc
digita "$a = 5", voc est atribuindo '5' a $a. '5', obviamente, tem o valor
5, ou, em outras palavras, '5' uma expresso com o valor 5 (neste caso, '5'
uma constante inteira).</simpara>
<simpara>
Depois desta atribuio, voc pode esperar que o valor de $a seja 5 tambm,
assim se voc escrever $b = $a, voc pode esperar que ele se comporte da mesma
forma que se voc escrevesse $b = 5. Em outras palavras, $a uma expresso com
valor 5 tambm. Se tudo funciona bem, isto exatamente o que acontecer.
</simpara>
<para>
Exemplos ligeiramente mais complexos para expresses so as funes. Por exemplo,
considere a seguinte funo:
<informalexample>
<programlisting>
function foo () {
return 5;
}
</programlisting>
</informalexample></para>
<simpara>
Assumindo que voc est familiarizado com o conceito de funes (se no estiver,
d uma olhada no captulo sobre funes), voc pode assumir que digitar
<literal>$c = foo()</literal> essencialmente a mesma coisa que escrever
<literal>$c = 5</literal>, e voc est certo. Funes so expresses com o valor
igual ao seu valor de retorno. Como foo() retorna 5, o valor da expresso
'foo()' 5. Geralmente, as funes no retornam apenas um valor esttico, mas
computam algo.</simpara>
<simpara>
Obviamente, os valores em PHP no tm que ser inteiros, e muito frequentemente eles
no so. O PHP suporta trs tipos de valor escalar: valores inteiros, valores de
ponto flutuante e valores de string (valores escalares so valores que voc no pode
quebrar em pedaos menores, diferente de matrizes, por exemplo).
O PHP tambm suporta dois tipos compostos (no-escalares): matrizes e objetos. Cada
um destes tipos de valor podem ser atribudos a variveis ou retornadas de funes.
</simpara>
<simpara>
At agora, os usurios de PHP/FI 2 no sentiriam qualquer mudana. Porm, o PHP
traz expresses bem mais novas, da mesma forma que muitas outras linguagens.
O PHP uma linguagem orientada a expresses, no sentido de que quase tudo so
expresses. Considere o exemplo com o qual j lidamos, '$a = 5'. fcil ver que
h dois valores envolvidos aqui, o valor da constante inteira '5', e o valor de
$a que est sendo atualizado para 5 tambm. Mas a verdade que h um valor
adicional envolvido aqui, e que o prprio valor da atribuio. A prpria atribuio
avaliada com o valor atribudo, neste caso 5. Na prtica, significa que
'$a = 5', independente do que faa, uma expresso com o valor 5. Portanto, escrever
algo como '$b = ($a = 5)' como escrever '$a = 5; $b = 5;' (um ponto-e-vrgula
marca o fim do comando). Como atribuies so analisadas da direita para a esquerda,
voc tambm pode escrever '$b = $a = 5'.</simpara>
<simpara>
Outro bom exemplo de orientao de expresso o pr e o ps-incremento e decremento.
Usurios de PHP/FI 2 e muitas outras linguagens podem estar familiarizados com a
notao de varivel++ e varivel--. Estes so operadores de incremento e decremento.
Em PHP/FI 2, o comando '$a++' no tem valor (no uma expresso), e portanto voc
no pode atribuir desta forma ou us-la de jeito nenhum. O PHP evoluiu a capabilidade
de incremento/decremento criando estas expresses tambm, como em C. Em PHP, como em C,
h dois tipos de incremento - pr-incremento e ps-incremento. Tanto o pr-incremento
quanto o ps-incremento, essencialmente, incrementam variveis, e o efeito sobre a
varivel idntico. A diferena com o valor da expresso de incremento.
O pr-incremento, que escrito '++$variable', avaliado como o valor de incremento
(o PHP incrementa a varivel antes de ler seu valor, por isso o nome pr-incremento).
O ps-incremento, que escrito '$variable++' avaliado como o valor original da
varivel, antes de ser incrementada (o PHP incrementa a varivel depois de ler seu
valor, por isso o nome 'ps-incremento').</simpara>
<simpara>
Um tipo muito comum de expresso so expresses de comparao. Estas expresses so
avaliadas como 0 ou 1, significando &false; ou &true; (respectivamente). O PHP suporta
> (maior que), >= (maior ou igual), == (igual), != (diferente), < (menor que)
e <=(menor ou igual). Estas expresses so usadas mais frequentemente dentro de
execues condicionais, como em comandos <literal>if</literal>.</simpara>
<simpara>
O ltimo exemplo de expresses com que ns vamos lidar aqui so as expresses combinadas
operador-atribuio. Voc j sabe que se voc quer incrementar $a de 1, voc s precisa
escrever '$a++' ou '++$a'. Mas e se voc quiser somar mais que um a ele, por exemplo 3?
Voc poderia escrever '$a++' vrias vezes, mas esta obviamente no uma forma muito
eficiente ou confortvel. Uma prtica muito mais comum escrever '$a = $a + 3'.
'$a + 3' avaliada como o valor de $a mais 3, e atribudo de volta a $a, que resulta
em incrementar $a de 3. Em PHP, como em vrias outras linguagens como o C, voc pode
escrever isto de uma forma mais curta, que com o tempo se torna mais limpa e rpida de
se entender, tambm. Somar 3 ao valor corrente de $a pode ser escrito '$a +=3'. Isto
significa exatamente "pegue o valor de $a, some 3 a ele, e atribua-o de volta a $a."
Alm de ser mais curto e mais limpo, isto tambm resulta em execuo mais rpida. O
valor de '$a += 3', como o valor de uma atribuio regular, o valor atribudo. Note
que NO 3, mas o valor combinado de $a mais 3 (este o valor que atribudo a
$a). Qualquer operador de duas posies pode ser usado neste modo operador-atribuio,
por exemplo '$a -= 5' (subtrai 5 do valor de $a),
'$b *= 7' (multiplica o valor de $b por 7), etc.</simpara>
<para>
H mais uma expresso que podem parecer estranha se voc no a viu em outras linguagens,
o operador condicional ternrio:
<informalexample><programlisting>
$first ? $second : $third
</programlisting></informalexample>
Se o valor da primeira sub-expresso verdadeiro (no-zero), ento a segunda sub-expresso
avaliada, e este o resultado da expresso condicional. Caso contrrio, a terceira
sub-expresso avaliada e este o valor.</para>
<para>
O seguinte exemplo deve ajud-lo a entender um pouco melhor pr e ps-incremento e expresses
em geral:
<informalexample>
<programlisting>
function double($i) {
return $i*2;
}
$b = $a = 5; /* atribui o valor cinco s variveis $a e $b */
$c = $a++; /* ps-incremento, atribui o valor original de $a
(5) a $c */
$e = $d = ++$b; /* pr-incremento, atribui o valor incrementado de
$b (6) a $d e $e */
/* neste ponto, tanto $d quanto $e so iguais a 6 */
$f = double($d++); /* atribui o dobro do valor de $d <emphasis>antes</emphasis>
do incremento, 2*6 = 12 a $f */
$g = double(++$e); /* atribui o dobro do valor de $e <emphasis>depois</emphasis>
do incremento, 2*7 = 14 a $g */
$h = $g += 10; /* primeiro, $g incrementado de 10 e termina com o valor
24. o valor da atribuio (24) ento atribudo
a $h, e $h termina com o valor 24 tambm. */
</programlisting></informalexample></para>
<simpara>
No comeo do captulo, ns dissemos que descreveramos os vrios tipos de
comandos, e como prometido, expresses podem ser comandos. Porm, nem toda
expresso um comando. Neste caso, um comando tem a forma 'expr' ';', ou
seja, uma expresso seguida de ponto-e-vrgula. E '$b=$a=5;', $a=5 uma
expresso vlida, mas no um comando por si s. '$b=$a=5;' porm um
comando vlido.</simpara>
<simpara>
Uma ltima coisa que vale mencionar o valor-verdade de expresses. Em
muitos eventos, principalmente em execues condicionais e 'loops', voc no
est interessado no valor especfico da expresso, mas s interessa se ela
significa &true; ou &false; (o PHP no tem um tipo booleano dedicado). O
valor-verdade de expresses em PHP calculado de uma forma similar ao Perl.
Qualquer valor numrico diferente de zero &true;, zero &false;. Tenha certeza
de notar que valores negativos so diferentes de zero, e portanto considerados
&true;! A string vazia e a string "0" so falsas; todas as outras strings so
&true;. Com valores no-escalares (matrizes e objetos) - se o valor no contiver
elementos considerado &false;, caso contrrio considerado &true;.</simpara>
<simpara>
O PHP fornece uma implementao completa e poderosa de expresses, e a completa
documentao dela vai alm do escopo deste manual. Os exemplos acima devem dar a
voc uma boa idia sobre o que so as expresses e como voc pode construir
expresses teis. Atravs do restante do manual ns escreveremos
<replaceable>expr</replaceable> para indicar qualquer expresso PHP vlida.</simpara>
</chapter>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
-->
|