Capítulo 10 . Expressões

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 " .

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 ) .

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á .

Exemplos ligeiramente mais complexos para expressões são as funções . Por exemplo , considere a seguinte função :






Assumindo que você está familiarizado com o conceito de funções ( se não estiver , uma olhada no capítulo sobre funções) , você pode assumir que digitar $c = foo( ) é essencialmente a mesma coisa que escrever $c = 5 , 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 .

Obviamente , os valores em PHP não têm que ser inteiros , e muito freqüentemente eles não são . O PHP suporta três tipos de valores escalares : valores inteiros , valores de ponto flutuante e valores de string ( valores escalares são valores que você não pode quebrar em pedaços menores , diferente de matrizes , por exemplo ) . O PHP também suporta dois tipos compostos ( não-escalares ) : matrizes e objetos . Cada um destes tipos de valor podem ser atribuídos a variáveis ou retornadas de funções .

Até agora , os usuários de PHP / FI 2 não sentiriam qualquer mudança . Porém , o PHP traz expressões bem mais novas , da mesma forma que muitas outras linguagens . O PHP é uma linguagem orientada a expressões , no sentido de que quase tudo são expressões . Considere o exemplo com o qual lidamos , ' $a = 5 ' . É fácil ver que 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 um valor adicional envolvido , 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 ' .

Outro bom exemplo de orientação de expressão é o pré e o pós-incremento e decremento . Usuários de PHP / FI 2 e muitas outras linguagens podem estar familiarizados com a notação de variável+ + e variável-- . Estes são os operadores de incremento e decremento . 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 , dois tipos de incremento - pré-incremento e pós-incremento . Tanto o pré-incremento quanto o pós-incremento , essencialmente , incrementam 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' ) .

Um tipo muito comum de expressão são expressões de comparação . Estas expressões são 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 expressões são usadas mais freqüentemente dentro de instruções condicionais , como em comandos if .

O último exemplo de expressões com que nós vamos lidar aqui são as expressões combinadas operador-atribuição . Você sabe que se você quer incrementar $a de 1 , você 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 .

mais uma expressão que podem parecer estranha se você não a viu em outras linguagens , o operador condicional ternário :

 
$primeira

 
?

 
$segunda

 
:

 
$terceira



Se o valor da primeira sub-expressão é verdadeiro ( TRUE , 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.

O seguinte exemplo deve ajudá-lo a entender um pouco melhor pré e pós-incremento e expressões em geral :

 
function

 
double(

 
$i

 
)

 
{

 
return

 
$i*2

 
;

 
}

 
$b

 
=

 
$a

 
=

 
5

 
;

 
/

 
*

 
atribui

 
o

 
valor

 
cinco

 
às

 
variáveis

 
$a

 
e

 
$b

 
*

 
/

 
$c

 
=

 
$a++

 
;

 
/

 
*

 
pós-incremento

 
,

 
atribui

 
o

 
valor

 
original

 
de

 
$a

 
(5

 
)

 
para

 
$c

 
*

 
/

 
$e

 
=

 
$d

 
=

 
++$b

 
;

 
/

 
*

 
pré-incremento

 
,

 
atribui

 
o

 
valor

 
incrementado

 
de

 
$b

 
(6

 
)

 
a

 
$d

 
e

 
$e

 
*

 
/

 
/

 
*

 
neste

 
ponto

 
,

 
tanto

 
$d

 
quanto

 
$e

 
são

 
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

 
atribuição

 
(24

 
)

 
é

 
então

 
atribuído

 
a

 
$h

 
,

 
e

 
$h

 
termina

 
com

 
o

 
valor

 
24

 
também

 
.

 
*

 
/





No começo do capítulo , nós dissemos que descreveríamos os vários tipos de comandos , e como prometido , expressões podem ser comandos . Porém , nem toda expressão é um comando . Neste caso , um comando tem a forma ' expr ' ' ; ' , ou seja , uma expressão seguida de ponto-e-vírgula . E ' $b=$a=5 ;' , $a=5 é uma expressão válida , mas não é um comando por si . '$b=$a=5 ; ' porém é um comando válido .

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 TRUE ou FALSE ( o PHP não tem um tipo booleano dedicado ) . As constantes TRUE e FALSE ( insensitivas ao caso ) são seus dois valores booleanos possíveis . As vezes uma expressão é automaticamente convertida para um booleano . Veja a seção sobre type-casting para detalhes de como isso é feito .

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 expr ou expressao para indicar qualquer expressão PHP válida .