File: expressions.xml

package info (click to toggle)
phpdoc 20020310-1
  • links: PTS
  • area: main
  • in suites: woody
  • size: 35,272 kB
  • ctags: 354
  • sloc: xml: 799,767; php: 1,395; cpp: 500; makefile: 200; sh: 140; awk: 51
file content (191 lines) | stat: -rw-r--r-- 10,076 bytes parent folder | download
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
    &gt; (maior que), &gt;= (maior ou igual), == (igual), != (diferente), &lt; (menor que) 
    e &lt;=(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:
 -->