<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <HTML ><HEAD ><TITLE >Expressões</TITLE ><META NAME="GENERATOR" CONTENT="Modular DocBook HTML Stylesheet Version 1.79"><LINK REL="HOME" TITLE="Manual do PHP" HREF="index.html"><LINK REL="UP" TITLE="Referência da Linguagem" HREF="langref.html"><LINK REL="PREVIOUS" TITLE="Constantes Mágicas" HREF="language.constants.predefined.html"><LINK REL="NEXT" TITLE="Operadores" HREF="language.operators.html"><META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=UTF-8"></HEAD ><BODY CLASS="chapter" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#840084" ALINK="#0000FF" ><DIV CLASS="NAVHEADER" ><TABLE SUMMARY="Header navigation table" WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TH COLSPAN="3" ALIGN="center" >Manual do PHP</TH ></TR ><TR ><TD WIDTH="10%" ALIGN="left" VALIGN="bottom" ><A HREF="language.constants.predefined.html" ACCESSKEY="P" >Anterior</A ></TD ><TD WIDTH="80%" ALIGN="center" VALIGN="bottom" ></TD ><TD WIDTH="10%" ALIGN="right" VALIGN="bottom" ><A HREF="language.operators.html" ACCESSKEY="N" >Próxima</A ></TD ></TR ></TABLE ><HR ALIGN="LEFT" WIDTH="100%"></DIV ><DIV CLASS="chapter" ><H1 ><A NAME="language.expressions" >Capítulo 14. Expressões</A ></H1 ><P > Expressões são as peças de construção mais importantes do PHP. No PHP, quase tudo o que você escreve são expressões. A maneira mais simples e ainda mais precisa de definir uma expressão é "tudo o que tem um valor". </P ><P > As formas mais básicas de expressões são constantes e variáveis. Quando você digita "$a = 5", você está atribuindo '5' para $a. '5', obviamente, tem o valor 5, ou, em outras palavras, '5' é uma expressão com o valor 5 (neste caso, '5' é uma constante inteira). </P ><P > Depois desta atribuição, você pode esperar que o valor de $a seja 5 também, assim se você escrever $b = $a, você pode esperar que $b se comporte da mesma forma que se você escrevesse $b = 5. Em outras palavras, $a é uma expressão com valor 5 também. Se tudo funcionou bem, isto é exatamente o que acontecerá. </P ><P > Exemplos ligeiramente mais complexos para expressões são as funções. Por exemplo, considere a seguinte função: <DIV CLASS="informalexample" ><P ></P ><A NAME="AEN4054" ></A ><TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><code><font color="#000000"> <font color="#0000BB"><?php<br /></font><font color="#007700">function </font><font color="#0000BB">foo </font><font color="#007700">()<br />{<br /> return </font><font color="#0000BB">5</font><font color="#007700">;<br />}<br /></font><font color="#0000BB">?></font> </font> </code></TD ></TR ></TABLE ><P ></P ></DIV > </P ><P > Assumindo que você está familiarizado com o conceito de funções (se não estiver, dê uma olhada no capítulo sobre <A HREF="language.functions.html" >functions</A >), você pode assumir que digitar <TT CLASS="literal" >$c = foo()</TT > é essencialmente a mesma coisa que escrever <TT CLASS="literal" >$c = 5</TT >, e você está certo. Funções são expressões com o valor igual ao seu valor de retorno. Como foo() retorna 5, o valor da expressão 'foo()' é 5. Geralmente, as funções não retornam apenas um valor estático, mas computam algo. </P ><P > Claro, valores em PHP não tem que ser inteiros, e muito comumente eles não são. o PHP suporta quatro tipos de valores escalares: valores <A HREF="language.types.integer.html" ><B CLASS="type" >integer</B ></A > (inteiros), valores de ponto flutuante (<A HREF="language.types.float.html" ><B CLASS="type" >float</B ></A >), valores <A HREF="language.types.string.html" ><B CLASS="type" >string</B ></A > (caracteres) e valores <A HREF="language.types.boolean.html" ><B CLASS="type" >boolean</B ></A > (booleano) (valores escalares são valores que você não pode partir em peças menores, diferentemente de matrizes, por exemplo). O PHP também suporta dois tipos compostos (não escalar): matrizes e objetos. Cada um desses valores podem ser definidos em uma variável ou retornados de uma função. </P ><P > O PHP leva as expressões muito além, da mesma maneira que muitas outras linguagens fazem. O PHP é uma linguagem orientada a expressões, no sentido de que quase tudo são expressões. Considere o exemplo com o qual já lidamos, '$a = 5'. É fácil ver que há dois valores envolvidos aqui, o valor da constante inteira '5', e o valor de $a que está sendo atualizado para 5 também. Mas a verdade é que há um valor adicional envolvido aqui, e que é o próprio valor da atribuição. A própria atribuição é avaliada com o valor atribuído, neste caso 5. Na prática, significa que '$a = 5', independente do que faça, é uma expressão com o valor 5. Portanto, escrever algo como '$b = ($a = 5)' é como escrever '$a = 5; $b = 5;' (um ponto-e-vírgula marca o fim do comando). Como atribuições são analisadas da direita para a esquerda, você também pode escrever '$b = $a = 5'. </P ><P > Outro bom exemplo de orientação de expressão é o pré e o pós-incremento e decremento. Usuários de PHP 2 e muitas outras linguagens podem estar familiarizados com a notação de variável++ e variable--. Este são <A HREF="language.operators.increment.html" > operadores de incremento e decrimento</A >. No PHP/FI 2, o comando '$a++' não tem valor (não é uma expressão), e portanto você não pode atribuir desta forma ou usá-la de jeito nenhum. O PHP evoluiu a capacidade de incremento/decremento criando estas expressões também, como em C. Em PHP, como em C, há dois tipos de incremento - pré-incremento e pós-incremento. Tanto o pré-incremento quanto o pós-incremento, essencialmente, incrementam as variáveis, e o efeito sobre a variável é idêntico. A diferença é com o valor da expressão de incremento. O pré-incremento, que é escrito '++$variavel', é avaliado como o valor de incremento (o PHP incrementa a variável antes de ler seu valor, por isso o nome pré-incremento). O pós-incremento, que é escrito '$variavel++' é avaliado como o valor original da variável, antes de ser incrementada (o PHP incrementa a variável depois de ler seu valor, por isso o nome 'pós-incremento'). </P ><P > Um tipo muito comum de expressões são expressões de <A HREF="language.operators.comparison.html" >comparação</A >. Estas expressões avaliam para ser <TT CLASS="constant" ><B >FALSE</B ></TT > ou <TT CLASS="constant" ><B >TRUE</B ></TT >. O PHP suporta > (maior que), >= (maior ou igual a), == (igual), != (diferente), < (menor que) and <= (menor ou igual a). A linguagem também suporta um conjunto de operador de equivalencia estrita: === (igual a e do mesmo tipo) and !== (diferente de ou não do mesmo tipo). Estas expressões são mais comumente usada dentro de execução condicional como comandos <TT CLASS="literal" >if</TT >. </P ><P > O último exemplo de expressões com que nós vamos lidar aqui são as expressões combinadas operador-atribuição. 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++' várias vezes, mas esta obviamente não é uma forma muito eficiente ou confortável. Uma prática muito mais comum é escrever '$a = $a + 3'. '$a + 3' é avaliada como o valor de $a mais 3, e é atribuído de volta a $a, que resulta em incrementar $a de 3. Em PHP, como em várias outras linguagens como o C, você pode escrever isto de uma forma mais curta, que com o tempo se torna mais limpa e rápida de se entender também. 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." Além de ser mais curto e mais limpo, isto também resulta em execução mais rápida. O valor de '$a += 3', como o valor de uma atribuição regular, é o valor atribuído. Note que NÃO é 3, mas o valor combinado de $a mais 3 (este é o valor que é atribuído a $a). Qualquer operador de dois parâmetros pode ser usado neste modo operador-atribuição, por exemplo '$a -= 5' (subtrai 5 do valor de $a), '$ b *= 7' (multiplica o valor de $b por 7), etc. </P ><P > Há mais uma expressão que podem parecer estranha se você não a viu em outras linguagens, o operador condicional ternário: </P ><P > <DIV CLASS="informalexample" ><P ></P ><A NAME="AEN4076" ></A ><TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><code><font color="#000000"> <font color="#0000BB"><?php<br />$primeira </font><font color="#007700">? </font><font color="#0000BB">$segunda </font><font color="#007700">: </font><font color="#0000BB">$terceira<br />?></font> </font> </code></TD ></TR ></TABLE ><P ></P ></DIV > </P ><P > Se o valor da primeira sub-expressão é verdadeiro (<TT CLASS="constant" ><B >TRUE</B ></TT >, não-zero), então a segunda sub-expressão é avaliada, e este é o resultado da expressão condicional. Caso contrário, a terceira sub-expressão é avaliada e este é o valor. </P ><P > O seguinte exemplo deve ajudá-lo a entender um pouco melhor pré e pós-incremento e expressões em geral: </P ><P > <DIV CLASS="informalexample" ><P ></P ><A NAME="AEN4082" ></A ><TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><code><font color="#000000"> <font color="#0000BB"><?php<br /></font><font color="#007700">function </font><font color="#0000BB">double</font><font color="#007700">(</font><font color="#0000BB">$i</font><font color="#007700">)<br />{<br /> return </font><font color="#0000BB">$i</font><font color="#007700">*</font><font color="#0000BB">2</font><font color="#007700">;<br />}<br /></font><font color="#0000BB">$b </font><font color="#007700">= </font><font color="#0000BB">$a </font><font color="#007700">= </font><font color="#0000BB">5</font><font color="#007700">; </font><font color="#FF8000">/* atribui o valor cinco às variáveis $a e $b */<br /></font><font color="#0000BB">$c </font><font color="#007700">= </font><font color="#0000BB">$a</font><font color="#007700">++; </font><font color="#FF8000">/* pós-incremento, atribui o valor original de $a<br /> (5) para $c */<br /></font><font color="#0000BB">$e </font><font color="#007700">= </font><font color="#0000BB">$d </font><font color="#007700">= ++</font><font color="#0000BB">$b</font><font color="#007700">; </font><font color="#FF8000">/* pré-incremento, atribui o valor incrementado de<br /> $b (6) a $d e $e */<br /><br />/* neste ponto, tanto $d quanto $e são iguais a 6 */<br /><br /></font><font color="#0000BB">$f </font><font color="#007700">= </font><font color="#0000BB">double</font><font color="#007700">(</font><font color="#0000BB">$d</font><font color="#007700">++); </font><font color="#FF8000">/* atribui o dobro do valor de $d antes<br /> do incremento, 2*6 = 12 a $f */<br /></font><font color="#0000BB">$g </font><font color="#007700">= </font><font color="#0000BB">double</font><font color="#007700">(++</font><font color="#0000BB">$e</font><font color="#007700">); </font><font color="#FF8000">/* atribui o dobro do valor de $e depois<br /> do incremento, 2*7 = 14 a $g */<br /></font><font color="#0000BB">$h </font><font color="#007700">= </font><font color="#0000BB">$g </font><font color="#007700">+= </font><font color="#0000BB">10</font><font color="#007700">; </font><font color="#FF8000">/* primeiro, $g é incrementado de 10 e termina com o<br /> valor 24. o valor da atribuição (24) é<br /> então atribuído a $h, e $h termina com o valor<br /> 24 também. */<br /></font><font color="#0000BB">?></font> </font> </code></TD ></TR ></TABLE ><P ></P ></DIV > </P ><P > Algumas expressões podem ser consideradas instruções. Neste caso, uma instrução na forma 'expr' ';' ou seja, uma expressão seguida de um ponto e vírgula. Em '$b=$a=5;', $a=5 é uma expressão válida, mas não é um comando por si só. '$b=$a=5;' porém é um comando válido. </P ><P > Uma última coisa que vale mencionar é o valor-verdade de expressões. Em muitos eventos, principalmente em instruções condicionais e loops, você não está interessado no valor específico da expressão, mas somente se ela significa <TT CLASS="constant" ><B >TRUE</B ></TT > ou <TT CLASS="constant" ><B >FALSE</B ></TT > (o PHP não tem um tipo booleano dedicado). As constantes <TT CLASS="constant" ><B >TRUE</B ></TT > e <TT CLASS="constant" ><B >FALSE</B ></TT > (insensitivas ao caso) são seus dois valores booleanos possíveis. As vezes uma expressão é automaticamente convertida para um booleano. Veja a <A HREF="language.types.type-juggling.html#language.types.typecasting" >seção sobre type-casting</A > para detalhes de como isso é feito. </P ><P > O PHP fornece uma implementação completa e poderosa de expressões, e a completa documentação dela vai além do escopo deste manual. Os exemplos acima devem dar a você uma boa idéia sobre o que são as expressões e como você pode construir expressões úteis. Através do restante do manual nós escreveremos <CODE CLASS="varname" >expr</CODE > ou <CODE CLASS="varname" >expressao</CODE > para indicar qualquer expressão PHP válida. </P ></DIV ><DIV CLASS="NAVFOOTER" ><HR ALIGN="LEFT" WIDTH="100%"><TABLE SUMMARY="Footer navigation table" WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" ><A HREF="language.constants.predefined.html" ACCESSKEY="P" >Anterior</A ></TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" ><A HREF="index.html" ACCESSKEY="H" >Principal</A ></TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" ><A HREF="language.operators.html" ACCESSKEY="N" >Próxima</A ></TD ></TR ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" >Constantes Mágicas</TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" ><A HREF="langref.html" ACCESSKEY="U" >Acima</A ></TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" >Operadores</TD ></TR ></TABLE ></DIV ></BODY ></HTML >