leszek Sat May 25 05:06:29 2002 EDT
Added files:
/phpdoc-pl/language control-structures.xml
Log:
[qrak] language/control-structures.xml - en v. 1.58 DONE!
[qrak] At last... :-)
Index: phpdoc-pl/language/control-structures.xml
+++ phpdoc-pl/language/control-structures.xml
<?xml version="1.0" encoding="iso-8859-2"?>
<!-- EN-Revision: 1.58 Maintainer: Qrak Status: ready -->
<!-- $Revision: 1.1 $ -->
<chapter id="control-structures">
<title>Struktury kontrolne</title>
<simpara>
Ka�dy skrypt PHP zbudowany jest z wyra�e�. Wyra�eniem mo�e by� przypisanie,
odwo�anie do funkcji, p�tla, wyra�enie warunkowe, a nawet wyra�enie, kt�re
nic nie robi (puste wyra�enie). Wyra�enia zwykle ko�cz� si� znakiem �rednika.
Dodatkowo, wyra�enia mog� by� grupowane przez umieszczenie ich w nawiasach
sze�ciennych. Grupa wyra�e� sama tak�e jest wyra�eniem. W tym rozdziale
opisano rozmaite rodzaje wyra�e�.
</simpara>
<sect1 id="control-structures.if">
<title><literal>if</literal></title>
<para>
Instrukcja <literal>if</literal> (je�eli) jest jednym z najwa�niejszych
mechanizm�w dost�pnych w wielu j�zykach z PHP w��cznie. Pozwala na
wyodr�bnienie fragmentu kodu, kt�ry zostanie wykonany pod okre�lonym
warunkiem. Instrukcja <literal>if</literal> w PHP jest bardzo podobna do
swojego odpowiednika z j�zyka C:
<informalexample>
<programlisting>
<![CDATA[
if (warunek)
wyra�enie
]]>
</programlisting>
</informalexample>
</para>
<simpara>
Jak opisano w <link linkend="language.expressions">rozdziale na temat
wyra�e�</link>, obliczana jest warto��
logiczna wyra�enia <replaceable>warunek</replaceable>. Je�li
<replaceable>warunek</replaceable> jest r�wny &true;
<replaceable>wyra�enie</replaceable> zostanie wykonane; w przeciwnym razie
zostanie pomini�te. Wi�cej informacji na temat obliczania logicznych
warto�ci wyra�e� w rozdziale <link
linkend="language.types.boolean.casting">'Konwersja do typu
boolowskiego'</link>.
</simpara>
<para>
Poni�szy przyk�ad wy�wietli napis <computeroutput>a jest wi�ksze ni�
b</computeroutput>, je�li <replaceable>$a</replaceable> b�dzie wi�ksze od
<replaceable>$b</replaceable>:
<informalexample>
<programlisting role="php">
<![CDATA[
if ($a > $b)
print "a jest wi�ksze ni� b";
]]>
</programlisting>
</informalexample>
</para>
<para>
Cz�sto potrzeba, aby wi�cej ni� jedna instrukcja by�a wykonana pod przyj�tym
warunkiem. Nie ma oczywi�cie potrzeby umieszcza� ka�dej z tych instrukcji
w osobnej strukturze <literal>if</literal>. Zamiast tego nale�y zgrupowa�
te instrukcje za pomoc� instrukcji grupuj�cej. Na przyk�ad poni�szy kod
wy�wietli <computeroutput>a jest wi�ksze ni� b</computeroutput>, je�eli
<replaceable>$a</replaceable> jest wi�ksze ni�
<replaceable>$b</replaceable>, i przypisze warto��
<replaceable>$a</replaceable> do <replaceable>$b</replaceable>:
<informalexample>
<programlisting role="php">
<![CDATA[
if ($a > $b) {
print "a jest wi�ksze ni� b";
$b = $a;
}
]]>
</programlisting>
</informalexample>
</para>
<simpara>
Instrukcje <literal>if</literal> mog� by� dowolnie umieszczane wewn�trz
innych instrukcji <literal>if</literal>, co zapewnia autorowi programu
kompletn� elastyczno�� przy ustalaniu warunkowego wykonywania poszczeg�lnych
cz�ci programu.
</simpara>
</sect1>
<sect1 id="control-structures.else">
<title><literal>else</literal></title>
<para>
Cz�sto potrzeba wykona� jedn� instrukcj� programu, gdy pewien warunek jest
spe�niony, lub inn� inn�, gdy ten sam warunek nie jest spe�niony. S�u�y
do tego instrukcja <literal>else</literal>. <literal>else</literal>
rozszerza mo�liwo�ci instrukcji <literal>if</literal> do sytuacji kiedy
warunek opisany przy instrukcji <literal>if</literal> ma warto�� &false;.
Na przyk�ad poni�szy kod wy�wietli <computeroutput>a jest wi�ksze ni�
b</computeroutput> je�eli <replaceable>$a</replaceable> jest wi�ksze ni�
<replaceable>$b</replaceable>, lub <computeroutput>a NIE jest wi�ksze ni�
b</computeroutput> w przeciwnym przypadku.:
<informalexample>
<programlisting role="php">
<![CDATA[
if ($a > $b) {
print "a jest wi�ksze ni� b";
} else {
print "a NIE jest wi�ksze ni� b";
}
]]>
</programlisting>
</informalexample>
Kod zawarty w instrukcji <literal>else</literal> wykonywany jest tylko
w�wczas, kiedy wyra�enie logiczne przy instrukcji <literal>if</literal>
ma warto�� &false;, a je�li w tej samej grupie znajdowa�y si� te� instrukcje
<literal>elseif</literal> - tylko w�wczas je�li i w tych instrukcjach
wyra�enia logiczne mia�y warto�� &false; (Patrz tak�e: instrukcja <link
linkend="control-structures.elseif">elseif</link>).
</para>
</sect1>
<sect1 id="control-structures.elseif">
<title><literal>elseif</literal></title>
<para>
Instrukcja <literal>elseif</literal>, jak sama jej nazwa wskazuje, stanowi
po��czenie instrukcji <literal>if</literal> i <literal>else</literal>.
Podobnie jak <literal>else</literal> rozszerza instrukcj�
<literal>if</literal> do sytuacji, kiedy wyra�enie logiczne stoj�ce przy
<literal>if</literal> ma warto�� &false;. Jednak�e w przeciwie�stwie do
typowej instrukcji <literal>else</literal>, kod obj�ty t� instrukcj� b�dzie
wykonany, je�li wyra�enie logiczne stoj�ce przy tej instrukcji b�dzie mia�o
warto�� &true;. Poni�szy przyk�ad wy�wietli <computeroutput>a jest wi�ksze
ni� b</computeroutput>, <computeroutput>a jest r�wne b</computeroutput>
lub <computeroutput>a jest mniejsze ni� b</computeroutput>:
<informalexample>
<programlisting role="php">
<![CDATA[
if ($a > $b) {
print "a jest wi�ksze ni� b";
} elseif ($a == $b) {
print "a jest r�wne b";
} else {
print "a jest mniejsze ni� b";
}
]]>
</programlisting>
</informalexample>
</para>
<simpara>
Mo�na u�y� kilku instrukcji <literal>elseif</literal> w jednym bloku
instrukcji <literal>if</literal>. Wykonany wtedy b�dzie ten blok, kt�ry
pierwszy b�dzie mie� warto�� &true;. W PHP mo�na te� napisa� 'else if'
(dwoma s�owami) zamiast 'elseif' (jednym s�owem). Z punktu widzenia
sk�adni j�zyka, wyra�enia te r�ni� si� od siebie (je�li znasz si� na C,
jest to ta sama r�nica co w C), jednak wynik ich dzia�ania jest ten sam.
</simpara>
<simpara>
Dana instrukcja <literal>elseif<literal> b�dzie wykonana tylko w�wczas,
je�li wszystkie poprzedzaj�ce j� instrukcje <literal>if<literal> i
<literal>elseif</literal> w danym bloku mia�y warto�� logiczn� &false;,
a ona sama ma warto�� logiczn� &true;.
</simpara>
</sect1>
<sect1 id="control-structures.alternative-syntax">
<title>Sk�adnia alternatywna w strukturach kontrolnych</title>
<para>
PHP oferuje alternatywn� sk�adni� dla niekt�rych struktur kontrolnych,
a dok�adnie dla: <literal>if</literal>, <literal>while</literal>,
<literal>for</literal>, <literal>foreach</literal> i
<literal>switch</literal>.
W ka�dym przypadku podstawowa forma sk�adni alternatywnej polega na zamianie
nawiasu otwieraj�cego na dwukropek (:), a nawiasu zamykaj�cego na
odpowiednie s�owo: <literal>endif;</literal>, <literal>endwhile;</literal>,
<literal>endfor;</literal>, <literal>endforeach;</literal> lub
<literal>endswitch;</literal>.
<informalexample>
<programlisting role="php">
<![CDATA[
<?php if ($a == 5): ?>
A jest r�wne 5
<?php endif; ?>
]]>
</programlisting>
</informalexample>
</para>
<simpara>
W przyk�adzie powy�ej, blok HTML "A jest r�wne 5" jest zagnie�d�ony w
instrukcji <literal>if</literal> napisanej w sk�adni alternatywnej. Ten
fragment kodu HTML zostanie wy�wietlony tylko w�wczas, kiedy $a b�dzie
r�wne 5.
</simpara>
<para>
Alternatywna sk�adnia obejmuje te� wyra�enia <literal>else<literal> i
<literal>elseif<literal>. Poni�szy przyk�ad prezentuje obydwa
wyra�enia zapisane przy pomocy sk�adni alternatywej:
<informalexample>
<programlisting role="php">
<![CDATA[
if ($a == 5):
print "a jest r�wne 5";
print "...";
elseif ($a == 6):
print "a jest r�wne 6";
print "!!!";
else:
print "a jest r�ne od 5 lub 6";
endif;
]]>
</programlisting>
</informalexample>
</para>
<para>
Wi�cej przyk�ad�w w rozdzia�ach:
<link linkend="control-structures.while">while</link>,
<link linkend="control-structures.for">for</link>, i <link
linkend="control-structures.if">if</link>.
</para>
</sect1>
<sect1 id="control-structures.while">
<title><literal>while</literal></title>
<para>
P�tla <literal>while</while> jest najprostrzym typem p�tli w PHP. Zachowuje
si� ona identycznie jak jej odpowiednik z j�zyka C. Jej podstawowa forma
wygl�da nast�puj�co:
<informalexample>
<programlisting>
<![CDATA[
while (wyra�enie) instrukcja
]]>
</programlisting>
</informalexample>
</para>
<simpara>
Znaczenie instrukcji <literal>while</literal> jest bardzo proste. Nakazuje
ona PHP tyle razy wykonywa� okre�lone instrukcje, jak d�ugo wyra�enie
przy s�owie <literal>while</lieral> ma warto�� &true;. Warto�� tego
wyra�enia jest sprawdzana za ka�dym razem na pocz�tku wykonywania nowej
iteracji p�tli, wi�c je�li jego warto�� zmieni si� w trakcie wykonywania
instrukcji, wykonanie ca�ej p�tli nie sko�czy si� do momentu zako�czenia
ca�ej iteracji. Jedna iteracja jest to jednokrotne wykonanie wszystkich
instrukcji w p�tli. Je�li wyra�enie logiczne ma warto�� &false; ju� na
samym pocz�tku, instrukcje wewn�trz p�tli nie b�d� w og�le wykonane.
</simpara>
<para>
Podobnie jak w instrukcji <literal>if</literal>, w p�tli
<literal>while</literal> mo�na grupowa� instrukcje za pomoc� nawias�w
klamrowych, lub przez u�ycie sk�adni alternatywnej:
<informalexample>
<programlisting>
<![CDATA[
while (wyra�enie): instrukcja; instrukcja; ... endwhile;
]]>
</programlisting>
</informalexample>
</para>
<para>
Poni�sze przyk�ady s� identyczne i obydwa wy�wietlaj� liczby od 1 do 10:
<informalexample>
<programlisting role="php">
<![CDATA[
/* przyk�ad 1*/
$i = 1;
while ($i <= 10) {
print $i++; /* zmienna $i b�dzie inkrementowana po wy�wietleniu
(post-inkrementacja) */
}
/* przyk�ad 2 */
$i = 1;
while ($i <= 10):
print $i;
$i++;
endwhile;
]]>
</programlisting>
</informalexample>
</para>
</sect1>
<sect1 id="control-structures.do.while">
<title><literal>do..while</literal></title>
<simpara>
P�tla <literal>do..while</literal> zachowuje si� bardzo podobnie do p�tli
<literal>while</literal>, z wyj�tkiem tego, �e warto�� wyra�enia logicznego
sprawdzana jest na ko�cu iteracji, a nie na pocz�tku. Wynikaj�c� z tego
g��wn� r�nic� jest to, �e pierwsza iteracja w p�tli
<literal>do..while</literal> na pewno zostanie wykonana (gdy� wyra�enie
logiczne b�dzie sprawdzone dopiero na koniec iteracji). Natomiast w p�tli
<literal>while</literal>, gdzie wyra�enie logiczne jest sprawdzane na
pocz�tku iteracji, mo�e doj�� do sytuacji, �e p�tla w og�le nie zostanie
wykonana, je�li to wyra�enie b�dzie mia�o warto�� &false; od pocz�tku.
</simpara>
<para>
P�tla <literal>do..while</literal> ma tylko jeden rodzaj sk�adni:
<informalexample>
<programlisting role="php">
<![CDATA[
$i = 0;
do {
print $i;
} while ($i>0);
]]>
</programlisting>
</informalexample>
</para>
<simpara>
Powy�sza p�tla zostanie wykonana tylko raz, gdy� po pierwszej iteracji,
warto�� wyra�enia logicznego wynosi� b�dzie &false; ($i nie jest wi�ksze
od 0) i p�tla zostanie zako�czona.
</simpara>
<para>
Zaawansowani programi�ci C s� zaznajomieni z innym wykorzystaniem p�tli
<literal>do..while</literal>, kt�re s�u�y do przerwania wykonywania bloku
instrukcji w okre�lonym momencie przez u�ycie
<literal>do..while</literal>(0) i instrukcji <link
linkend="control-structures.break"><literal>break</literal></link>.
Demonstruje to poni�szy kod:
<informalexample>
<programlisting role="php">
<![CDATA[
do {
if ($i < 5) {
print "i jest za ma�e";
break;
}
$i *= $factor;
if ($i < $minimum_limit) {
break;
}
print "i jest w porz�dku";
...operacje na i...
} while(0);
]]>
</programlisting>
</informalexample>
</para>
<simpara>
Nie przejmuj si�, je�li nie rozumiesz tego do ko�ca lub w og�le. Mo�esz
tworzy� skrypty, nawet zaawansowane skrypty bez u�ycia tego
'mechanizmu'.
</simpara>
</sect1>
<sect1 id="control-structures.for">
<title><literal>for</literal></title>
<para>
P�tla <literal>for</literal> jest najbardziej skomplikowanym rodzajem p�tli
w PHP. Zachowuje si� identycznie jak jej odpowiedniki z C. Jej sk�adnia
wygl�da nast�puj�co:
<informalexample>
<programlisting>
<![CDATA[
for (wyra�enie1; wyra�enie2; wyra�enie3) instrukcje
]]>
</programlisting>
</informalexample>
</para>
<simpara>
<replaceable>wyra�enie1</replaceable> jest wykonywane
tylko raz, na pocz�tku p�tli.
</simpara>
<simpara>
Na pocz�tku ka�dej nowej iteracji, obliczana jest warto�� logiczna
wyra�enia <replaceable>wyra�enie2</replaceable>. Je�li wynikiem obliczenia
jest &true;, to p�tla kontynuuje i nast�puje wykonanie instrukcji
umieszczonych w p�tli. Je�li jednak wyra�enie ma warto�� &false;, to
wykonanie p�tli zostaje przerwane.
</simpara>
<simpara>
Na ko�cu ka�dej iteracji zostaje wykonane
<replaceable>wyra�enie3</replaceable>.
</simpara>
<simpara>
Ka�de z wyra�e� mo�e by� puste.
Puste <replaceable>wyra�enie2</replaceable> oznacza, �e p�tla jest
niesko�czona (PHP interpretuje to jako warto�� &true;, podobnie z reszt�
jak C). Nie jest to jednak tak bezu�yteczne, jak to si� mo�e wydawa�,
gdy� cz�sto stosuje si� to w po��czeniu z instrukcj� <link
linkend="control-structures.break"></literal>break</literal></link>,
co zast�puje <replaceable>wyra�enie2</replaceable> w p�tli
<literal>for</literal>.
</simpara>
<para>
Wszystkie poni�sze przyk�ady wy�wietlaj� liczby od 1 do 10. Prosz� zauwa�y�
rozmaite odmiany sk�adni:
<informalexample>
<programlisting role="php">
<![CDATA[
/* przyk�ad 1 */
for ($i = 1; $i <= 10; $i++) {
print $i;
}
/* przyk�ad 2 */
for ($i = 1;;$i++) {
if ($i > 10) {
break;
}
print $i;
}
/* przyk�ad 3 */
$i = 1;
for (;;) {
if ($i > 10) {
break;
}
print $i;
$i++;
}
/* przyk�ad 4 */
for ($i = 1; $i <= 10; print $i, $i++);
]]>
</programlisting>
</informalexample>
</para>
<simpara>
Oczywi�cie najzgrabniejsza sk�adnia jest w przyk�adzie pierwszym (albo
czwartym), ale w wielu sytuacjach puste wyra�enia w p�tli
<literal>for</literal> bardzo si� przydaj�.
</simpara>
<para>
PHP obs�uguje r�wnie� sk�adni� alternatywn� (z dwukropkiem) w p�tli
<literal>for</literal>.
<informalexample>
<programlisting>
<![CDATA[
for (wyra�enie1; wyra�enie2; wyra�enie3): instrukcja; ...; endfor;
]]>
</programlisting>
</informalexample>
</para>
<para>
Inne j�zyki programowania posiadaj� p�tl� <literal>foreach</literal>
do obs�ugi tablic itp. W PHP 3 nie ma takiej p�tli, natomiast zosta�a
ona dodana do PHP 4. Wi�cej na ten temat w odpowiednim <link
linkend="control-structures.foreach">rozdziale</link>. W PHP 3 mo�na
po��czy� instrukcje <link linkend="control-structures.while">while</link>,
<function>list</function> i <function>each</function> co pozwoli osi�gn��
ten sam efekt. Przyk�ady na to znajduj� si� w rozdzia�ach dotycz�cych
wy�ej wymienionych instrukcji.
</para>
</sect1>
<sect1 id="control-structures.foreach">
<title><literal>foreach</literal></title>
<para>
PHP 4 zawiera, czego brak w PHP 3, konstrukcj� <literal>foreach</literal>,
podobn� do jej odpowiednik�w z Perla i innych j�zyk�w. P�tla ta umo�liwia
�atw� iteracj� wewn�trz tablic. Istniej� dwie sk�adnie tej konstrukcji,
przy czym druga jest mniej wa�nym, lecz u�ytecznym rozszerzeniem pierwszej:
<informalexample>
<programlisting>
<![CDATA[
foreach(wyra�enie_tablicowe as $warto��) wyra�enie
foreach(wyra�enie_tablicowe as $klucz => $warto��) wyra�enie
]]>
</programlisting>
</informalexample>
</para>
<simpara>
Pierwsza odmiana iteruje wewn�trz tablicy podanej w
<literal>wyra�enie_tablicowe</literal>. Przy ka�dej iteracji, warto��
aktualnego elementu tablicy jest przypisywana do zmiennej
<literal>$warto��</literal>, a wewn�trzny wska�nik tablicy jest przesuwany
o jeden (wi�c w nast�pnej iteracji przypisany zostanie kolejny element
tablicy).
</simpara>
<simpara>
Druga odmiana dzia�a tak samo jak pierwsza, przy czym klucz aktualnego
elementu tablicy zostanie przypisany do zmiennej <literal>$klucz</literal>
w ka�dej iteracji.
</simpara>
<para>
<note>
<para>
Kiedy rozpoczyna si� wykonywanie p�tli <literal>foreach</literal>,
wewn�trzny wska�nik tablicy jest automatycznie resetowany, co ustawia
go na pierwszym elemencie tablicy. Oznacza to, �e nie trzeba wywo�ywa�
komendy <function>reset</function> przed rozpocz�ciem p�tli
<literal>foreach</literal>.
</para>
</note>
</para>
<para>
<note>
<para>
Prosz� tak�e pami�ta�, �e konstrukcja <literal>foreach</literal> operuje
na kopii tablicy, a nie na oryginale, wi�c po�o�enie wska�nika tablicy
nie jest modyfikowane jak w konstrukcji <function>each</function>,
a zmiany dokonane na pobranym elemencie tablicy nie oddzia�uj� na
oryginaln� tablic�.
</para>
</note>
</para>
<note>
<para>
<literal>foreach</literal> nie pozwala na ukrycie komunikat�w
o b��dach za pomoc� '@'.
</para>
</note>
<para>
Mo�na zauwa�y�, �e poni�sze przyk�ady s� funkcjonalnie identyczne:
<informalexample>
<programlisting role="php">
<![CDATA[
reset ($tabl);
while (list(, $warto��) = each ($tabl)) {
echo "Warto��: $warto��<br>\n";
}
foreach ($tabl as $warto��) {
echo "Warto��: $warto��<br>\n";
}
]]>
</programlisting>
</informalexample>
Poni�sze przyk�ady s� r�wnie� funkcjonalnie identyczne:
<informalexample>
<programlisting role="php">
<![CDATA[
reset ($tabl);
while (list($klucz, $warto��) = each ($tabl)) {
echo "Klucz: $klucz; Warto��: $warto��<br>\n";
}
foreach ($tabl as $klucz => $warto��) {
echo "Klucz: $klucz; Warto��: $warto��<br>\n";
}
]]>
</programlisting>
</informalexample>
</para>
<para>
Wi�cej przyk�ad�w demonstruj�cych u�ycie tej p�tli:
<informalexample>
<programlisting role="php">
<![CDATA[
/* przyk�ad 1 foreach: tylko warto�� */
$a = array (1, 2, 3, 17);
foreach ($a as $v) {
print "Aktualna warto�� \$a: $v.\n";
}
/* przyk�ad 2 foreach: warto�� (z kluczem generowanym dla potrzeb ilustracji)*/
$a = array (1, 2, 3, 17);
$i = 0; /* tylko dla potrzeb ilustracyjnych */
foreach($a as $v) {
print "\$a[$i] => $v.\n";
$i++;
}
/* przyk�ad 3 foreach: klucz i warto�� */
$a = array (
"jeden" => 1,
"dwa" => 2,
"trzy" => 3,
"siedemna�cie" => 17
);
foreach($a as $k => $v) {
print "\$a[$k] => $v.\n";
}
/* przyk�ad 4 foreach: tablice wielowymiarowe */
$a[0][0] = "a";
$a[0][1] = "b";
$a[1][0] = "y";
$a[1][1] = "z";
foreach($a as $v1) {
foreach ($v1 as $v2) {
print "$v2\n";
}
}
/* przyk�ad 5 foreach: tablice dynamiczne */
foreach(array(1, 2, 3, 4, 5) as $v) {
print "$v\n";
}
]]>
</programlisting>
</informalexample>
</para>
</sect1>
<sect1 id="control-structures.break">
<title><literal>break</literal></title>
<simpara>
<literal>break</literal> zaka�cza wykonywanie aktualnej instrukcji
<literal>for</literal>, <literal>foreach</literal>
<literal>while</literal>, <literal>do..while</literal> lub
<literal>switch</literal>.
</simpara>
<simpara>
<literal>break</literal> akceptuje opcjonalny argument, kt�ry m�wi, ile
zagnie�dzonych struktur kontrolnych ma zosta� przerwanych w danym momencie.
</simpara>
<para>
<informalexample>
<programlisting role="php">
<![CDATA[
$arr = array ('jeden', 'dwa', 'trzy', 'cztery', 'stop', 'pi��');
while (list (, $val) = each ($arr)) {
if ($val == 'stop') {
break; /* Mo�na tu te� napisa�: 'break 1;' */
}
echo "$val<br>\n";
}
/* U�ycie opcjonalnego argumentu: */
$i = 0;
while (++$i) {
switch ($i) {
case 5:
echo "Na 5<br>\n";
break 1; /* Wyjd� tylko ze switch. */
case 10:
echo "Na 10; wyj�cie<br>\n";
break 2; /* Wyjd� ze switch i z while. */
default:
break;
}
}
]]>
</programlisting>
</informalexample>
</para>
</sect1>
<sect1 id="control-structures.continue">
<title><literal>continue</literal></title>
<simpara>
<literal>continue</literal> u�ywane jest wewn�trz instukcji p�tli do
przerwania wykonywania danej iteracji p�tli i rozpocz�cia zupe�nie nowej
iteracji.
</simpara>
<simpara>
<literal>continue</literal> akceptuje opcjonalny argument liczbowy, kt�ry
m�wi, ilu poziom�w zagnie�d�onych p�tli dana instrukcja
<literal>continue</literal> dotyczy.
</simpara>
<para>
<informalexample>
<programlisting role="php">
<![CDATA[
while (list ($klucz, $warto��) = each ($arr)) {
if (!($klucz % 2)) { // opu�� klucze nieparzyste
continue;
}
zr�b_co�_z_nieparzystymi ($warto��);
}
$i = 0;
while ($i++ < 5) {
echo "Zewn�trzna<br>\n";
while (1) {
echo " �rodkowa<br>\n";
while (1) {
echo " Wewn�trzna<br>\n";
continue 3;
}
echo "To si� nigdy nie wy�wietli.<br>\n";
}
echo "Ani to.<br>\n";
}
]]>
</programlisting>
</informalexample>
</para>
</sect1>
<sect1 id="control-structures.switch">
<title><literal>switch</literal></title>
<simpara>
Instrukcja <literal>switch</literal> jest podobna do serii instrukcji IF
z warunkiem na to samo wyra�enie. W wielu przypadkach istnieje potrzeba
por�wnania jednej zmiennej (lub wyra�enia) z wieloma r�nymi warto�ciami
i wykonania r�nych fragment�w kodu, w zale�no�ci od wyniku por�wnania tej
zmiennej z r�nymi warto�ciami. Do tego w�a�nie s�u�y instrukcja
<literal>switch</literal>.
</simpara>
<para>
Poni�ej znajduj� si� dwa przyk�ady wykonuj�ce dok�adnie to samo, przy czym
jeden z nich wykorzystuje seri� instrukcji <literal>if</literal>, za�
drugi u�ywa instrukcji <literal>switch</literal>:
<informalexample>
<programlisting role="php">
<![CDATA[
if ($i == 0) {
print "i jest r�wne 0";
}
if ($i == 1) {
print "i jest r�wne 1";
}
if ($i == 2) {
print "i jest r�wne 2";
}
switch ($i) {
case 0:
print "i jest r�wne 0";
break;
case 1:
print "i jest r�wne 1";
break;
case 2:
print "i jest r�wne 2";
break;
}
]]>
</programlisting>
</informalexample>
</para>
<para>
Wa�ne jest by zrozumie�, jak dzia�a instrukcja <literal>switch</literal>,
�eby unikn�� b��d�w. Instrukcja <literal>switch</literal> jest wykonywana
linia po linii (dok�adnie wyra�enie po wyra�eniu). Na pocz�tku �aden
fragment kodu nie jest wykonywany. Dopiero kiedy zostaje odnalezione
wyra�enie <literal>case</literal>, kt�rego warto�� odpowiada wyra�eniu
przy instrukcji <literal>switch</literal>, PHP rozpoczyna wykonywanie
kodu od miejsca, gdzie znajduje si� ta instrukcja <literal>case</literal>.
PHP wykonuje instrukcje a� do momentu kiedy blok <literal>switch</literal>
si� sko�czy, lub do momentu znalezienia instrukcji <literal>break</literal>.
Je�li nie napiszesz instrukcji <literal>break</literal> na ko�cu instrukcji
w danym wyra�eniu <literal>case</literal> to PHP b�dzie wykonywa� dalej
instrukcje z nast�pnego wyra�enia <literal>case</literal>. Na przyk�ad:
<informalexample>
<programlisting role="php">
<![CDATA[
switch ($i) {
case 0:
print "i jest r�wne 0";
case 1:
print "i jest r�wne 1";
case 2:
print "i jest r�wne 2";
}
]]>
</programlisting>
</informalexample>
</para>
<simpara>
W tym przypadku, je�li $i jest r�wne 0, to PHP wykona wszystkie trzy
instrukcje print. Je�li natomiast b�dzie r�wne jeden - wtedy tylko dwie
ostatnie. Zachowanie zgodne z oczekiwaniami b�dzie wtedy, kiedy $i b�dzie
r�wne 2 - wtedy wykonane b�dzie tylko ostatnia instrukcja print. Nie wolno
zatem zapomina� o umieszczaniu na ko�cu instrukcji <literal>break</literal>,
chyba �e planuje si� wykorzysta� jakie� specjalne mo�liwo�ci instrukcji
<literal>switch</literal>, o czym dalej.
</simpara>
<simpara>
W instrukcji <literal>switch</literal> warto�� wyra�enia jest obliczana
tylko raz, a nast�pnie jest por�wnywana z ka�dym z wyra�e� przy etykiecie
<literal>case</literal>. Natomiast w instrukcji <literal>elseif</literal>
warto�� wyra�enia jest obliczana ponownie. Dlatego, je�li twoje wyra�enie
jest bardziej skomplikowane od zwyk�ego por�wnania, lub znajduje si� w
zwartej p�tli (tight loop), <literal>switch</literal> mo�e by� szybszy.
</simpara>
<para>
Po etykiecie case mog� nie wyst�powa� �adne instrukcje, co oznacza po
prostu, �e sterowanie zostaje przekazane do nast�pnej etykiety case.
<informalexample>
<programlisting role="php">
<![CDATA[
switch ($i) {
case 0:
case 1:
case 2:
print "i jest mniejsze od 3, ale nie jest ujemne";
break;
case 3:
print "i jest r�wne 3";
}
]]>
</programlisting>
</informalexample>
</para>
<para>
Specjaln� etykiet� jest etykieta warunku domy�lnego -
<literal>default</literal>. Etykieta ta dotyczy sytuacji, w kt�rej wyra�enie
nie pasowa�o do warto�ci przy innych etykietach typu <literal>case</litera>.
W instrukcji <literal>switch</literal> ta etykieta powinna by� ostatnia
z listy. Na przyk�ad:
<informalexample>
<programlisting role="php">
<![CDATA[
switch ($i) {
case 0:
print "i jest r�wne 0";
break;
case 1:
print "i jest r�wne 1";
break;
case 2:
print "i jest r�wne 2";
break;
default:
print "i jest r�ne od 0, 1 i 2";
}
]]>
</programlisting>
</informalexample>
</para>
<para>
Etykieta <literal>case</literal> mo�e zawiera� dowoln� warto�� typu
prostego, czyli liczb� ca�kowit�, zmiennoprzecinkow� lub �a�cuch znak�w.
Tablice lub obiekty nie mog� by� u�yte, o ile nie zostan� przekszta�cone
w jaki� typ prosty.
</para>
<para>
Instrukcja switch obs�uguje te� sk�adni� alternatywn�. Wi�cej informacji
na ten temat w rozdziale <link
linkend="control-structures.alternative-syntax">Sk�adnia alternatywna w
strukturach kontrolnych</link>.
<informalexample>
<programlisting role="php">
<![CDATA[
switch ($i):
case 0:
print "i jest r�wne 0";
break;
case 1:
print "i jest r�wne 1";
break;
case 2:
print "i jest r�wne 2";
break;
default:
print "i jest r�ne od 0, 1 i 2";
endswitch;
]]>
</programlisting>
</informalexample>
</para>
</sect1>
<sect1 id="control-structures.declare">
<title><literal>declare</literal></title>
<para>
Instrukcja <literal>declare</literal> s�u�y do ustawienia dyrektyw
wykonawczych dla bloku kodu. Sk�adnia instrukcji jest podobna do sk�adni
innych struktur kontrolnych:
<informalexample>
<programlisting>
<![CDATA[
declare (dyrektywa) instrukcje
]]>
</programlisting>
</informalexample>
</para>
<para>
Argument <literal>dyrektywa</literal> pozwala na ustawienie zachowania
si� danego bloku <literal>declare</literal>.
W chwili obecnej rozpoznawana jest tylko jedna dyrektywa:
<literal>ticks</literal>. (Wi�cej informacju na temat dyrektywy
<link linkend="control-structures.declare.ticks">ticks</link>
w dedykowanym podrozdziale).
</para>
<para>
Kod zawarty w bloku <literal>instrukcje</literal> b�dzie wykonywany. Spos�b
i poboczne efekty wykonania tego kodu mog� zale�e� od argumentu
<literal>dyrektywa</literal>.
</para>
<sect2 id="control-structures.declare.ticks">
<title>Ticks</title>
<para>
Tykni�cie (tick) jest zdarzeniem, kt�re nast�puje po ka�dych
<replaceable>N</replaceable> niskopoziomowych instrukcjach wykonywanych
przez parser wewn�trz bloku <literal>declare</literal>. Warto�� parametru
<replaceable>N</replaceable> jest okre�lana przez umieszczenie wyra�enia
<literal>ticks=<replaceable>N</replaceable></literal> wewn�trz argumentu
<literal>dyrektywa</literal> danego bloku <literal>declare</literal>.
</para>
<para>
Zdarzenie wywo�ywanie na ka�de tykni�cie okre�la si� przez u�ycie funkcji
<function>register_tick_function</function>. Wi�cej szczeg��w znajduje
si� w poni�szym przyk�adzie. Prosz� pami�ta�, �e z ka�dym tykni�ciem mo�e
by� wywo�ywane wi�cej ni� jedno zdarzenie.
</para>
<para>
<example>
<title>Profilowanie sekcji kodu PHP </title>
<programlisting role="php">
<![CDATA[
<?php
// funkcja, kt�ra zapisuje czas jej wywo�ania
function profile ($wyrzu� = FALSE)
{
static $profile;
// zwr�� tablic� czas�w wywo�ania i wykasuj jej lokaln� kopi�
if ($wyrzu�) {
$temp = $profile;
unset ($profile);
return ($temp);
}
$profile[] = microtime ();
}
// ustal wska�nik tykni�cia
register_tick_function("profile");
// zainicjowanie funkcji przed blokiem declare
profile ();
// wykonaj poni�szy kod, generuj�c tykni�cie co 2 instrukcje
declare (ticks=2) {
for ($x = 1; $x < 50; ++$x) {
echo similar_text (md5($x), md5($x*$x)), "<br />";
}
}
// Wy�wietl dane przechowywane w profilerze
print_r (profile (TRUE));
?>
]]>
</programlisting>
</example>
Powy�szy przyk�ad profiluje kod PHP wewn�trz bloku "declare", zapisuj�c
czas wywo�ania co drugiej niskopoziomowej instrukcji w bloku instrukcji.
Informacj� t� mo�na wykorzysta� do wykrycia fragment�w kodu wykonywanych
w zbyt wolnym tempie. Problem wyszukania takich fragment�w mo�na
zrealizowa� na wiele sposob�w, przy czym u�ycie tykni�� jest najwygodniesze
i naj�atwiejsze do zaimplementowania.
</para>
<simpara>
Tykni�cia s� doskonale przystosowane dla potrzeb debugowania, implementacji
prostej wielozadaniowo�ci, wykonywania operacji We/Wy w tle i wielu innych
zada�.
</simpara>
<simpara>
Patrz tak�e <function>register_tick_function</function> i
<function>unregister_tick_function</function>.
</simpara>
</sect2>
</sect1>
<sect1 id="function.return">
<title>return</title>
<simpara>
Instrukcja <function>return</function>, wywo�ana z wn�trza funkcji,
natychmiastowo zaka�cza wykonywanie tej funkcji i zwraca jako jej warto��
sw�j argument. <function>return</function> zaka�cza r�wnie� wykonywanie
instrukcji <function>eval</function> lub danego pliku skryptowego.
</simpara>
<simpara>
Instrukcja ta, wywo�ana w zasi�gu globalnym, zaka�cza wykonywanie ca�ego
pliku skryptowego. Je�li dany skrypt by� do��czony funkcjami
<function>include</function> lub <function>require</function>, sterowanie
zostaje zwr�cone do pliku wywo�uj�cego. Poza tym, je�li plik zosta�
do��czony funkcj� <function>include</function>, argument przekazany do
funkcji <function>return</function> b�dzie zwr�cony jako warto�� funkcji
<function>include</function>. Je�li funkcja <function>return</function>
zostanie wywo�ana w g��wnym pliku skryptowym, nast�pi zako�czenie ca�ego
skryptu. Je�li dany skrypt zosta� wywo�any przez dyrektywy konfiguracyjne
<link linkend="ini.auto-prepend-file">auto_prepend_file</link> lub <link
linkend="ini.auto-append-file">auto_append_file</link> w <link
linkend="configuration.file">plik konfiguracyjnym</link>, wtedy wykonywnie
tego pliku skryptowego zostanie zako�czone.
</simpara>
<simpara>Wi�cej informacji w rozdziale <link
linkend="functions.returning-values">zwracanie warto�ci</link>.
</simpara>
<note>
<simpara>
Prosz� zauwa�y�, �e poniewa� <function>return</function> jest konstrukcj�
j�zykow� a nie funkcj�, nawiasy otaczaj�ce jej argumenty nie s� konieczne.
W rzeczywisto�ci cz�ciej s� one opuszczane przez programist�w, cho�
opuszczenie ich, czy nie, nie zmienia niczego.
</simpara>
</note>
</sect1>
<sect1 id="function.require">
<title><function>require</function></title>
<simpara>
Instrukcja <function>require</function> s�u�y do wczytania i wykonania
skryptu z okre�lonego pliku.
</simpara>
<simpara>
<function>require</function> wczytuje i wykonuje skrypt z podanego pliku.
Szczeg�owa informacja odno�nie tego, jak dzia�a wczytywanie opisana jest
w dokumentacji dla instrukcji <function>include</function>.
</simpara>
<simpara>
Instrukcje
<function>require</function> i <function>include</function>
s� identyczne w ka�dym szczeg�le, z wyj�tkiem obs�ugi b��d�w.
W razie niepowodzenia, <function>include</function> generuje ostrze�enie
(<link linkend="internal.e-warning">Warning</link>), podczas gdy
<function>require</function> generuje b��d krytyczny (<link
linkend="internal.e-error">Fatal Error</link>). Innymi s�owy, instrukcji
<function>require</function> u�ywa si� do wczytywania plik�w, kt�re s�
niezb�dne do dzia�ania skryptu i w przypadku ich braku wykonywanie skryptu
musi zosta� przerwane. Instukcja <function>include</function> nie zachowuje
si� w ten spos�b. W jej przypadku, przy braku pliku wykonywanie skryptu
b�dzie kontynuowane. Prosz� r�wnie� pami�ta� o w�a�ciwym ustawieniu
dyrektywy konfiguracyjnej <link
linkend="ini.include-path">include_path</link>.
</simpara>
<para>
<example>
<title>Podstawowe przyk�ady u�ycia <function>require</function></title>
<programlisting role="php">
<![CDATA[
<?php
require 'nag��wek.php';
require $plik;
require ('jaki�_plik.txt');
?>
]]>
</programlisting>
</example>
</para>
<simpara>
Wi�cej przyk�ad�w w dokumentacji instrukcji <function>include</function>.
</simpara>
<note>
<simpara>
Pocz�wszy od PHP 4.0.2, zachowanie instrukcji jest nast�puj�ce:
<function>require</function> b�dzie zawsze pr�bowa� odczyta� plik docelowy,
nawet je�li linia w kt�rej ona si� znajduje nigdy nie zostanie wykonana.
Instrukcja warunkowa nie wp�ywa na dzia�anie <function>require</function>.
Jednak�e, je�li linia, w kt�rej pojawia si� <function>require</function>
nie zostaje wykonana, zawarto�� pliku wczytywanego te� nie zostaje
wykonana. Podobnie, instrukcje p�tli nie wp�ywaj� na dzia�anie
<function>require</function>. Chocia� kod zawarty w pliku docelowy wci��
jest podmiotem p�tli, <function>require</function> dzia�a tylko raz.
</simpara>
</note>
<simpara>
Patrz tak�e <function>include</function>, <function>require_once</function>,
<function>include_once</function>, <function>eval</function>,
<function>file</function>, <function>readfile</function>,
<function>virtual</function> i
<link linkend="ini.include-path">include_path</link>.
</simpara>
</sect1>
<sect1 id="function.include">
<title><function>include</function></title>
<simpara>
Instrukcja <function>include</function> s�u�y do wczytania i wykonania
kodu z okre�lonego pliku w trakcie wykonywania skryptu.
</simpara>
<simpara>
Poni�sza dokumentacja dotyczy tak�e instrukcji
<function>require</function>. Obydwie instrukcje s� identyczne w ka�dym
szczeg�le, z wyj�tkiem obs�ugi b��d�w. <function>include</function>
generuje b��d typu <link linkend="internal.e-warning">Warning</link>,
podczas gdy <function>require</function> generuje b��d <link
linkend="internal.e-error">Fatal Error</link>. Innymi s�owy, funkcji
<function>require</function> u�ywa si�, by zatrzyma� przetwarzanie
skryptu, gdy brakuje jakiego� pliku. Je�eli zostanie u�yta funkcja
<function>include</function>, to w powy�szej sytuacji skrypt b�dzie
przetwarzany dalej. Prosz� pami�ta� o w�a�ciwym ustawieniu dyrektywy
<link linkend="ini.include-path">include_path</link>.
</simpara>
<simpara>
Kiedy plik zostanie wczytany instrukcj� <function>include</function>,
zawarty w nim kod dziedziczy <link
linkend="language.variables.scope">zasi�g zmiennych</link> po linii,
w kt�rej znajdowa�a si� instrukcja wczytania. Ka�da zmienna dost�pna
w linii z instrukcj� <function>include</function> b�dzie dost�pna we
wczytywanym pliku od miejsca wczytania naprz�d.
</simpara>
<para>
<example>
<title>Podstawowe wykorzystanie <function>include</function></title>
<programlisting role="php">
<![CDATA[
vars.php
<?php
$kolor = 'zielone';
$owoc = 'jab�ko';
?>
test.php
<?php
echo "Jedno $kolor $owoc"; // Jedno
include 'vars.php';
echo "Jedno $kolor $owoc"; // Jedno zielone jab�ko
?>
]]>
</programlisting>
</example>
</para>
<simpara>
Je�li instrukcja wczytania znajduje si� wewn�trz deklaracji funkcji, to
ca�y kod zawarty w pliku wczytywanym b�dzie zachowywa� si�, jakby by�
zdefiniowany wewn�trz tej funkcji. Znaczy to, �e odziedziczy zasi�g
zmiennych po tej funkcji.
</simpara>
<para>
<example>
<title>Wczytywanie wewn�trz funkcji</title>
<programlisting role="php">
<![CDATA[
<?php
function foo()
{
global $kolor;
include 'vars.php';
echo "Jeden $kolor $owoc";
}
/* vars.php znajduje si� w zasi�gu foo(), wi�c *
* $owoc NIE jest dost�pny poza zasi�giem tej *
* funkcji. Natomiast $kolor jest dost�pny, *
* poniewa� zosta� zadeklarowany w zasi�gu *
* globalnym. */
foo(); // Jedno zielone jab�ko
echo "A $kolor $owoc"; // Jedno zielone
?>
]]>
</programlisting>
</example>
</para>
<simpara>
Na pocz�tku wczytywanego pliku parsowanie wychodzi z trybu PHP do trybu
HTML i wraca do trybu pocz�tkowego na ko�cu. Z tego powodu ka�dy kod
wewn�trz wczytywanego pliku b�dzie wykonany jako kod PHP, o ile b�dzie
zawarty w <link linkend="language.basic-syntax.phpmode">wa�nych
znacznikach pocz�tku i ko�ca kodu PHP</link>.
</simpara>
<simpara>
Je�li
"<link linkend="ini.allow-url-fopen">URL fopen wrappers</link>"
s� w��czone w PHP (takie jest domy�lne ustawienie) mo�na poda� nazw� pliku
do wczytania u�ywaj�c adresu URL (przez protok� HTTP), zamiast podawa�
�cie�k� lokaln�. Je�li podany w adresie serwer interpretuje plik docelowy
jako kod PHP, mo�na do tego skryptu przekaza� zmienne w taki sam spos�b
jak przy metodzie GET protoko�u HTTP. �ci�le m�wi�c, nie jest to to samo,
co wczytywanie pliku lokalnego; jest to wykonanie pliku na zdalnym serwerze
i wklejenie rezultatu jego dzia�ania do skryptu wywo�uj�cego. W tym
przypadku, rzecz jasna, zasi�g globalny zmiennych nie obejmuje pliku
wczytywanego t� metod�.
</simpara>
<para>
<example>
<title><function>include</function> i protok� HTTP</title>
<programlisting role="php">
<![CDATA[
<?php
/* Przyk�ad ten zak�ada, �e serwer www.example.com jest tak skonfigurowany,
* �e wykonuje skrypty w plikach .php natomiast nie wykonuje skrypt�w w plikach
* .txt. Poj�cie 'dzia�a', znaczy tutaj, �e zmienne $foo i $bar s� dost�pne
* we wczytywanym pliku */
// Nie dzia�a: file.txt nie jest traktowany jak skrypt php
include 'http://www.example.com/file.txt?foo=1&bar=2';
// Nie dzia�a: PHP b�dzie szuka� pliku o nazwie 'file.php?foo=1&bar=2'
// w lokalnym systemie plik�w
include 'file.php?foo=1&bar=2';
// Dzia�a.
include 'http://www.example.com/file.php?foo=1&bar=2';
$foo = 1;
$bar = 2;
include 'file.txt'; // Dzia�a.
include 'file.php'; // Dzia�a.
?>
]]>
</programlisting>
</example>
Patrz tak�e <link linkend="features.remote-files">Korzystanie ze zdalnych
plik�w</link>, <function>fopen</function> i <function>file</function>.
</para>
<para>
Poniewa� <function>include</function> i <function>require</function> s�
specialnymi konstrukcjami j�zykowymi, musz� by� umieszczone w instrukcji
grupuj�cej, aby mog�y dzia�a� w instrukcji warunkowej.
</para>
<para>
<example>
<title>include() i instrukcja warunkowa</title>
<programlisting role="php">
<![CDATA[
<?php
// Ten kod jest NIEPOPRAWNY i nie zadzia�a zgodnie z oczekiwaniami.
if ($warunek)
include $plik;
else
include $inny;
// Natomiast ten kod jest POPRAWNY.
if ($warunek) {
include $plik;
} else {
include $inny;
}
?>
]]>
</programlisting>
</example>
</para>
<simpara>
Obs�uga zwracanych warto�ci: mo�na wywo�a� instrukcj�
<function>return</function> wewn�trz wczytywanego pliku, aby zako�czy�
jego wykonywanie i powr�ci� do pliku wywo�uj�cego. Mo�na te� zwraca�
warto�ci z wczytywanych plik�w, co upodabnia wczytywanie plik�w do
wykorzystywania funkcji.
</simpara>
<note>
<simpara>
W PHP 3 instrukcja <function>return</function> mo�e pojawi� si� w bloku
instrukcji tylko w�wczas, je�li znajduje si� on wewn�trz funkcji. W takim
przypadku, oczywi�cie, <function>return</function> odnosi si� do tej
funkcji a nie do ca�ego pliku.
</simpara>
</note>
<para>
<example>
<title><function>include</function> i wyra�enie
<function>return</function></title>
<programlisting role="php">
<![CDATA[
return.php
<?php
$var = 'PHP';
return $var;
?>
noreturn.php
<?php
$var = 'PHP';
?>
testreturns.php
<?php
$foo = include 'return.php';
echo $foo; // wy�wietla 'PHP'
$bar = include 'noreturn.php';
echo $bar; // wy�wietla 1
?>
]]>
</programlisting>
</example>
</para>
<simpara>
Zmienna <literal>$bar</literal> ma warto�� <literal>1</literal>, poniewa�
wczytywanie pliku zako�czy�o si� powodzeniem. Prosz� zauwa�y� istotn�
r�nic� pomi�dzy powy�szymi przyk�adami. Pierwszy u�ywa instrukcji
<function>return</function> wewn�trz wczytywanego pliku, natomiast drugi
nie. Inne mo�liwo�ci "wczytania" plik�w do zmiennych to
<function>fopen</function>, <function>file</function> lub przez u�ycie
<function>include</function> razem z
<link linkend="ref.outcontrol">Funkcjami Kontroli Wyj�cia<link>.
</simpara>
<simpara>
Patrz tak�e <function>require</function>, <function>require_once</function>,
<function>include_once</function>, <function>readfile</function>,
<function>virtual</function>, i
<link linkend="ini.include-path">include_path</link>.
</simpara>
</sect1>
<sect1 id="function.require-once">
<title><function>require_once</function></title>
<para>
Instrukcja <function>require_once</function> s�u�y do wczytania i wykonania
kodu z okre�lonego pliku w trakcie wykonywania skryptu. Zachowanie jej
jest identyczne z instrukcj� <function>require</function> z jednym
wyj�tkiem, tzn. je�li dany plik zosta� ju� raz wczytany do tego skryptu,
nie b�dzie wczytany ponownie. Wi�cej informacji na temat dzia�ania tej
instrukcji w dokumentacji odno�nie <function>require</function>.
</para>
<para>
<function>require_once</function> powinno by� u�ywane w przypadku, gdy ten
sam plik m�g�by zosta� wczytany i wykonany wielokrotnie, ale ty chcesz mie�
pewno��, �e zostanie wczytany dok�adnie raz, aby unikn�� problem�w z
redefiniowaniem funkcji, nadpisywaniem zmiennych itp.
</para>
<para>
Przyk�ady u�ycia <function>require_once</function> i
<function>include_once</function> znajduj� si� w kodzie
<ulink url="&url.php.pear;">PEAR</ulink> do��czonym do najnowszych
dystrubucji kodu �r�d�owego PHP.
</para>
<note>
<para>
<function>require_once</function> dodano w PHP 4.0.1pl2
</para>
</note>
<para>
Patrz tak�e: <function>require</function>,
<function>include</function>, <function>include_once</function>,
<function>get_required_files</function>,
<function>get_included_files</function>, <function>readfile</function>,
i <function>virtual</function>.
</para>
</sect1>
<sect1 id="function.include-once">
<title><function>include_once</function></title>
<para>
Instrukcja <function>include_once</function> s�u�y do wczytania i wykonania
kodu z okre�lonego pliku w trakcie wykonywania skryptu. Dzia�anie instrukcji
podobne jest do <function>include</function>, z jednym wyj�tkiem, tzn.
je�li dany plik zosta� ju� raz do danego skryptu wczytany, nie b�dzie
ju� wczytany ponownie. Wskazuje na to nazwa instrukcji: include_once znaczy
wczytaj_raz.
</para>
<para>
<function>include_once</function> powinno by� stosowane w przypadkach, gdzie
ten sam plik mo�e by� wczytany wi�cej ni� raz w czasie wykonywania skryptu,
ale ty chcesz mie� pewno�� �e b�dzie wczytany tylko jeden raz, aby unikn��
problem�w z redefiniowaniem funkcji, nadpisaniem warto�ci zmiennych, itp.
</para>
<para>
Wi�cej przyk�ad�w wykorzystania <function>require_once</function> i
<function>include_once</function> znajdziesz w kodzie <ulink
url="&url.php.pear;">PEAR</ulink> do��czonym do najnowszych dystrybucji
kodu �r�d�owego PHP.
</para>
<note>
<para>
<function>include_once</function> dodano w PHP 4.0.1pl2
</para>
</note>
<para>
Patrz tak�e <function>include</function>,
<function>require</function>, <function>require_once</function>,
<function>get_required_files</function>,
<function>get_included_files</function>, <function>readfile</function>,
i <function>virtual</function>.
</para>
</sect1>
</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:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->