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 (216 lines) | stat: -rw-r--r-- 9,916 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
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
    &gt; (wikszy), &gt;= (wikszy lub rwny), == (rwny), != (nie rwny),
    &lt; (mniejszy) i &lt;= (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
-->