| 12
 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
 192
 193
 194
 195
 196
 197
 198
 199
 200
 201
 202
 203
 204
 205
 206
 207
 208
 209
 210
 211
 212
 213
 214
 215
 216
 
 | <?xml version="1.0" encoding="iso-8859-2"?>
<!-- EN-Revision: 1.17 Maintainer: leon Status: ready -->
<!-- $Revision: 1.7 $ -->
 <chapter id="language.expressions">
   <title>Wyraenia</title>
   <simpara>
    Wyraenia s nawaniejszymi elementami skadowymi PHP. W PHP prawie
    wszystko co napiszesz jest wyraeniem. Najprostsz i najdokadniejsz
    definicj wyraenia jest "wszystko co ma warto". </simpara>
   <simpara>
    Najbardziej podstawow form wyrae s stae i zmienna. Jeli napiszesz
    "$a = 5" przypisujesz '5' do '$a'. '5' ma oczywicie warto 5, lub innymi
    sowy '5' jest wyraeniem o wartoci 5 (w tym przypadku, '5' jest sta
    liczb cakowit).</simpara>
   <simpara>
    Po tym przypisaniu moesz si spodziwa, e wartoci $a jest take 5, wic
    jeli napiszesz "$b = $a" moesz si spodziewa, e bdzie to rwnoznaczne
    z napisaniem "$b = 5". Innymi sowy, $a jest wyraeniem o wartoci 5.
    Jeli wszystko dziaa prawidowo, to wszystko bdzie tak jak si
    spodziewae.</simpara>
   <para>
    Troch bardziej zoonymi przykadami wyrae s funkcje. Przyjrzyj si
    poniszej funkcji:
    <informalexample>
     <programlisting role="php">
<![CDATA[
function foo ()
{
    return 5;
}
]]>
     </programlisting>
    </informalexample></para>
   <simpara>
    Zakadajc e oswoie si z koncepcj funkcji (jeli nie, przejrzyj
    najpierw rozdzia o funkcjach), moesz zaoy, e napisanie
    <literal>$c = foo()</literal> jest rwnoznaczne z napisaniem
    <literal>$c = 5</literal>, i masz raci. Funkcje s wyraeniami o wartoci
    ktr zwracaj. Poniewa foo() zwraca 5, wartoci wyraenia 'foo()' jest
    5. Zazwyczaj funkcje nie zwracaj statycznej wartoci, ale co obliczaj.
    </simpara>
   <simpara>
    Oczywicie wartoci w PHP nie musz by liczbami cakowitymi, i bardzo
    czsto nie s nimi. PHP obsuguje 3 skalarne warotci danych: wartoci
    cakowite, wartoci rzeczywiste i cigi znakw (string) (wartoci skalarne
    to takie, ktrych nie moesz 'rozbi' na mniejsze kawaki, w
    przeciwiestwie do np. tablic). PHP obsuguje take dwa zoone
    (nieskalarne) typy danych: tablice i obiekty. Kad z tych wartoci mona
    przypisa do zmiennych lub moe by zwrcona przez funkcj. </simpara>
   <simpara>
    Jak narazie, uytkownicy PHP/FI 2 nie powinni odczu adnej zmiany.
    Jednake PHP rozwija wyraenia znacznie bardziej, podobnie jak wiele
    innych jzykw programowania. PHP jest jzykiem zorientowanym na
    wyraenia, co oznacza e prawie wszystko jest wyraeniem. Przyjrzyj si
    przykadowi ktry ju analizowalimy, '$a = 5'. atwo jest zauway, e s
    tu dwie wartoci. Warto staej cakowitej '5', a take warto $a, ktra
    zostanie zamieniona na 5. Ale tak naprawd jest tu jeszcze jedna warto,
    ktr jest warto operacji przypisania. Przypisanie przyjmuje warto
    przypisywanej wartoci, w tym przypadku 5. W praktyce oznacza to, e '$a =
    5', niezalenie co to robi, jest wyraeniem o wartoci 5. Wynika z tego,
    e napisanie '$b = ($a = 5)' jest rwnoznaczne napisaniu '$a = 5; $b = 5;'
    (rednik oznacza koniec instrukcji). Poniewa przypisania s przetwarzane
    od prawej do lewej, moesz take napisa '$b = $a = 5'.</simpara>
   <simpara>
    Kolejnym dobrym przykadem orientacji wyraeniowej jest pre- i
    postinkrementacja i dekrementacja. Uytkownicy PHP/FI 2 i wielu innych
    jzykw mog by ju zaznajomieni z notacj zmienna++ i zmienna--. S to
    operatory inkrementacji i dekrementacji. W PHP/FI 2 instrukcja '$a++' nie
    ma wartoci (nie jest wyraeniem), wic nie moesz jej przypisa lub uy
    w jakikolwiek sposb. PHP rozszerza moliwoci inkrementacji/dekrementacji
    robic take z nich wyraenia, podobnie jak w C. W PHP, tak jak w C, sa
    dwa typy inkrementacji: preinkrementacja i postinkrementacja. I pre- i
    postinkrementacja zwikszaj warto zmiannej, wic efekt w stosunku do
    zmiennej jest taki sam. Rnica jest w wartoci wyraenia inkrementacji.
    Preinkrementacja, ktra jest oznaczana jako '++$zmienna', zwraca
    zwikszon warto (PHP zwiksza zmienn przed odczytaniem wartoci,
    dlatego nazywa si to 'pre-inkrementacj'). Postinkrementacja, ktra jest
    oznaczana jako '$zmienna++', zwraca orginaln warto $zmienna przed
    zwikszeniem jej wartoci (PHP zwiksza warto po odczytaniu jej
    wartoci, std nazwa 'post-inkrementacja').</simpara>
   <simpara>
    Popularnym typem wyrae s wyraenia porwnania. Te wyraenia zwracaj
    warto 0 lub 1, oznaczajc odpowiednio &false; lub &true;. PHP obsuguje
    > (wikszy), >= (wikszy lub rwny), == (rwny), != (nie rwny),
    < (mniejszy) i <= (mniejszy lub rwny). Wyraenia te s powszechnie
    uywane przy sprawdzaniu warunkw, jak na przykad instrukcje
    <literal>if</literal>.</simpara>
   <simpara>
    Ostatnim przykadem, ktrym bdziemy si tu zajmowa s poczone
    wyraenia operacji i przypisania. Ju wiesz, e jeli chcesz zwikszy
    warto zmiennej $a o 1, moesz po prostu napisa '$a++' lub '++$a'. Ale
    co jeli chcesz doda do niej wicej ni jeden, na przykad 3? Mgby
    napisa wielokrotnie '$a++', ale nie jest to sposb ani efektywny ani
    wygodny. Czciej spotykane jest uywanie instrukcji '$a = $a + 3'. '$a +
    4' zwraca warto zmiennej $a plus 3, ktra jest przypisywana spowrotem do
    $a, co oznacza zwikszenie wartoci zmiennej $a o 3. W PHP, tak jak kilku
    innych jzykach jak na przykad C, moesz napisa to krcej, co z czasem
    stanie si take bardziej przejrzyste i atwiejsze do zrozumienia. Dodanie
    4 do biecej wartoci $a moe by zapisane jako '$a += 4'. Oznacza to
    dokadnie "we warto $a, dodaj do niej 3 i przypisz j spowrotem do $a".
    Oprcz bycia krtsz i bardziej przejrzyst, instrukcja ta jest take
    szybsza w wykonaniu. Warto '$a += 5', tak jak warto zwykego
    przypisania, jest przypisywan wartoci. Zauwa, e NIE jest to 4, ale
    poczona warot $a i 4 (jest to warto ktra jest przypisywana do $a).
    Dowolne dwuoperandowe operatory mog by uyte w trybie
    operacji-przypisania, na przykad '$a -= 5' (odejmij 5 od wartoci $a),
    '$b *= 7' (pomn warto $b przez 7), itp.
   </simpara>
   <para>
    Jest jeszcze jedno wyraenie, ktre moe si wyda dziwne jeli nie
    widziae go w innych jzykac, trjoperandowy operator warunkowy:
    <informalexample><programlisting role="php">
<![CDATA[
$pierwsze ? $drugie : $trzecie
]]>
    </programlisting></informalexample>
    
    Jeli wartoci pierwszego podwyraenia jest &true; (rzna od zera), to
    zwracany jest drugie podwyraanie, i jest to wynik wyraenia warunkowego.
    W przeciwnym wypadku, zwracana jest warto trzeciego podwyraenia.
   </para>
   <para>
    Poniszy przykad powinien pomc w lepszym zrozumieniu pre- i
    postinkrementacji i oglnie koncepcji wyrae:
    <informalexample>
     <programlisting role="php">
<![CDATA[
function double($i)
{
    return $i*2;
}
$b = $a = 5;        /* przypisz warto pic do zmiennej $a i $b */
$c = $a++;          /* postinkrementuj, przypisz pocztkow warto
                       $a (5) do $c */
$e = $d = ++$b;     /* preinkrementuj, przypisz zwikszon warto
                       $b (6) to $d i $e */
/* w tym momencie i $d i $e s rwne 6 */
$f = double($d++);  /* przypisz podwojon warto $d <emphasis>sprzed</emphasis>
                       inkrementacji, 2*6 = 12 do $f */
$g = double(++$e);  /* przypisz podwojon warto $e <emphasis>po</emphasis>
                       inkrementacji, 2*7 = 14 do $g */
$h = $g += 10;      /* na pocztku $g jest zwikszane o 10 i przyjmuje 
                       warto 24; warto przypisania (24) jest pniej
                       przypisywana do $h, ktre przyjmuje warto 24. */
]]>
     </programlisting>
    </informalexample>
   </para>
   <simpara>
    Na pocztku rozdziau powiedzielimy, e bdziemy opisywa rne typy
    instrukcji, i tak jak obiecywalimy, wyraenia mog by instrukcjami.
    Jednake nie kade wyraenie jest instrukcj. W tym przypadku ma posta
    'wyraenie' ';', czyli wyraenie a po nim rednik. W '$b=$a=5;', $a=5 jest
    poprawnym wyraeniem, ale nie jest instrukcj. Jednake '$b=$a=$b;' jest
    poprawn intrukcj.</simpara>
   <simpara>
    Ostatni rzecz wart uwagi jest warto prawdy wyrae. W wielu
    przypadkach, gwnie przy sprawdzaniu warunkow i w ptlach, nie interesuje
    ci warto wyraenia, ale tylko czy oznacza &true; czy &false;.
    
    <!-- (PHP nie mam dedykowanego typu boolean) : LE, ma -->
    
    Stae &true; i &false; (niezalene od wielkoci znakw) s dwiema
    moliwymi wartociami logicznymi. Kiedy to konieczne, wyraenie jest
    automatycznie konwertowane na typ boolean. Zobacz
    <link linkend="language.types.typecasting">rozdzia o rzutowaniu typw
    </link> jeli interesuj ci szczegy jak to jest przeprowadzane.
   </simpara>
   <simpara>
    PHP dostarcza penej i potnej implementacji wyrae i cakowita ich
    dokumentacja przekracza ramy tego podrcznika. Powysze przykady powinny
    da ci oglne pojcie czym s wyraenia i jak moesz konstruowa przydatne
    wyraenia. Przez reszt podrcznika bdziemy pisa
    <replaceable>expr</replaceable> aby oznaczy dowolne poprawne wyraenie
    PHP.</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
sgml-parent-document:nil
sgml-default-dtd-file:"../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->
 |