leszek Fri Dec 14 00:10:34 2001 EDT
Added files:
/phpdoc/pl/language variables.xml
Log:
variables.xml - version 1.26 done!
It's nice that such an important chapter is already translated.
Index: phpdoc/pl/language/variables.xml
+++ phpdoc/pl/language/variables.xml
<?xml version="1.0" encoding="iso-8859-2"?>
<!-- $Revision: 1.1 $ -->
<chapter id="language.variables">
<title>Zmienne</title>
<sect1 id="language.variables.basics">
<title>Podstawy</title>
<simpara>
Ka�d� zmienn� w PHP zapisuje si� poprzedzaj�c jej nazw� znakiem dolara "$".
Wielko�� liter w nazwie zmiennej jest rozr�niana.
</simpara>
<para>
Nazw zmiennych dotycz� te same regu�y, co innych rodzaj�w nazw w PHP.
Poprawna nazwa zmiennej zaczyna si� od litery lub znaku podkre�lenia "_",
po kt�rych mo�e wyst�pi� dowolna ilo�� liter, cyfr lub znak�w podkre�lenia.
Jako wyra�enie regularne, mo�na to zapisa� tak:
'[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*'
</para>
<note>
<simpara>
W naszym rozumieniu, liter� s� znaki a-z, A-Z i symbole ASCII od 127 do
255 (0x7f-0xff).
</simpara>
</note>
<para>
<informalexample>
<programlisting role="php">
<![CDATA[
$var = "Bob";
$Var = "Joe";
echo "$var, $Var"; // wy�wietla "Bob, Joe"
$4site = 'not yet'; // niepoprawna nazwa - zaczyna si� od cyfry
$_4site = 'not yet'; // poprawna nazwa - zaczyna si� znakiem podkre�lenia
$ja�� = 'not yet'; // poprawna nazwa - "�" i "�" nale�� do ASCII > 127
]]>
</programlisting>
</informalexample>
</para>
<para>
W PHP 3, przypisanie zmiennych jest mo�liwe tylko przez warto��. Innymi
s�owy, je�li przypiszesz do zmiennej jakie� wyra�enie, warto�� tego
wyra�enia zostanie skopiowana do zmiennej. Oznacza to, �e po przypisaniu
warto�ci jednej zmiennej do drugiej, p�niejsza
zmiana warto�ci jednej z nich nie spowoduje zmiany warto�ci drugiej.
Wi�cej informacji na ten temat w
rozdziale <link linkend="language.expressions">Wyra�enia</link>.
</para>
<para>
PHP 4 oferuje jeszcze jeden spos�b przypisywania warto�ci do zmiennych:
<emphasis>przypisanie przez referencj�</emphasis>. Oznacza to, �e nowa
zmienna tylko odnosi si� (innymi s�owy, "staje si� aliasem" lub "wskazuje
na") do pierwotnej zmiennej. Zmiany wykonane na nowej zmiennej oddzia�uj�
tak�e na pierwotn� zmienn� i vice versa. Ma to te� takie znaczenie, �e
nie nast�puje �adna operacja skopiowania, czyli przypisanie nast�puje
szybciej. Jednak�e wyra�ne przyspieszenie dzia�ania mo�e by� widoczne
tylko w p�tlach zwartych (ang. tight loops), lub przy przypisywaniu
du�ych tablic lub obiekt�w.
</para>
<para>
Aby przypisa� przez referencj�, postaw znak ampersand
(&) przed nazw� zmiennej przypisywanej (zmiennej od kt�rej pobierasz
warto��). Na przyk�ad poni�szy kod wy�wietla "To jest PHP" dwa razy:
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
$foo = "PHP"; // Przypisz warto�� "PHP" do $foo.
$bar = &$foo; // Przypisz referencyjnie $foo do $bar.
$bar = "To jest $bar"; // Zmie� $bar...
echo $foo; // $foo te� si� zmieni�o.
echo $bar;
?>
]]>
</programlisting>
</informalexample>
</para>
<para>
Nale�y pami�ta�, �e tylko wyra�enia posiadaj�ce nazw� mog� by� przypisane
przez referencj�.
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
$foo = 25;
$bar = &$foo; // Przypisanie poprawne.
$bar = &(24 * 7); // Przypisanie niepoprawne - do nienazwanego wyra�enia.
function test()
{
return 25;
}
$bar = &test(); // Niepoprawne.
?>
]]>
</programlisting>
</informalexample>
</para>
</sect1>
<sect1 id="language.variables.predefined">
<title>Zmienne Predefiniowane</title>
<simpara>
PHP udost�pnia du�� ilo�� predefiniowanych zmiennych dla ka�dego pracuj�cego
skryptu. Jednak�e wiele spo�r�d tych zmiennych nie mo�e by� w pe�ni
obja�nionych, gdy� s� zale�ne od rodzaju serwera, jego wersji i ustawie�
i innych czynnik�w. Niekt�re z tych zmiennych nie b�d� dost�pne dla
skrypt�w PHP uruchomionych z linii polece�.
</simpara>
<simpara>
Niezale�nie od wymienionych czynnik�w, poni�ej przedstawiamy list�
predefiniowanych zmiennych, dost�pnych w typowej instalacji PHP 3,
dzia�aj�cej jako modu� typowej instalacji <ulink
url="&url.apache;">Apache</ulink> 1.3.6.
</simpara>
<simpara>
Dla zapoznania si� ze wszystkimi predefiniowanymi zmiennymi (i mn�stwem
innych, u�ytecznych informacji) prosz� u�y� <function>phpinfo</function>.
</simpara>
<note>
<simpara>
Poni�sza lista nie jest i nie b�dzie wyczerpuj�ca. Jest to wy��cznie
wskaz�wka, jakie rodzaje predefiniowanych zmiennych mo�esz u�y� w swoim
skrypcie.
</simpara>
</note>
<sect2 id="language.variables.predefined.apache">
<title>Zmienne Apache'a</title>
<simpara>
Zmienne te dostarczane s� przez serwer www <ulink
url="&url.apache;">Apache</ulink>. Je�li u�ywasz innego serwera, nie ma
�adnej gwarancji, �e zmienne te b�d� dost�pne. Inny serwer mo�e pomin��
jak�� zmienn� lub dostarcza� zmienne inne ni� te. Jakkolwiek spora cz��
tych zmiennych jest zarejestrowana w
<ulink url="&url.cgispec;">specyfikacji CGI 1.1</ulink>, wi�c dost�p do
nich powinien by� mo�liwy.
</simpara>
<simpara>
Pami�taj, �e tylko kilka, je�li w og�le, spo�r�d tych zmiennych jest
dost�pnych (albo b�dzie mie� jakiekolwiek znaczenie) kiedy skrypt PHP
jest uruchomiony z linii polece�.
</simpara>
<para>
<variablelist>
<varlistentry>
<term>$GATEWAY_INTERFACE</term>
<listitem>
<simpara>
Okre�la wersj� specyfikacji CGI obs�ugiwan� przez serwer, np.
"CGI/1.1".
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>$SERVER_NAME</term>
<listitem>
<simpara>
Nazwa hosta serwera, na kt�rym skrypt jest wykonywany. Je�li skrypt
pracuje na ho�cie wirtualnym (ang. virtual host), zmienna b�dzie
zawiera� nazw� hosta wirtualnego.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>$SERVER_SOFTWARE</term>
<listitem>
<simpara>
Napis identyfikuj�cy serwer, wysy�any z nag��wkami przy odpowiedzi
na zapytanie.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>$SERVER_PROTOCOL</term>
<listitem>
<simpara>
Nazwa i wersja protoko�u informacyjnego, przez kt�ry zosta�o wys�ane
zapytanie, np. "HTTP/1.1".
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>$REQUEST_METHOD</term>
<listitem>
<simpara>
Kt�ra metoda zosta�a u�yta przy zapytaniu o dokument, np. "GET",
"HEAD", "POST".
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>$QUERY_STRING</term>
<listitem>
<simpara>
�a�cuch zapytania (np. ?foo=bar), o ile istnieje, jaki zosta�
przes�any z zapytaniem o stron�.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>$DOCUMENT_ROOT</term>
<listitem>
<simpara>
Folder g��wny na serwerze, taki jak okre�lony w pliku konfiguracyjnym
serwera.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>$HTTP_ACCEPT</term>
<listitem>
<simpara>
Zawarto�� nag��wka <literal>Accept:</literal> z aktualnego zapytania,
o ile taki wyst�puje.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>$HTTP_ACCEPT_CHARSET</term>
<listitem>
<simpara>
Zawarto�� nag��wka <literal>Accept-Charset:</literal> z aktualnego
zapytania, o ile taki wyst�puje, np. "iso-8859-1,*,utf-8".
'iso-8859-1,*,utf-8'.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>$HTTP_ACCEPT_ENCODING</term>
<listitem>
<simpara>
Zawarto�� nag��wka <literal>Accept-Encoding:</literal> z aktualnego
zapytanie, o ile taki wyst�puje, np. "gzip".
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>$HTTP_ACCEPT_LANGUAGE</term>
<listitem>
<simpara>
Zawarto�� nag��wka <literal>Accept-Language:</literal> z aktualnego
zapytanie, o ile taki wyst�puje, np. "en".
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>$HTTP_CONNECTION</term>
<listitem>
<simpara>
Zawarto�� nag��wka <literal>Connection:</literal> z aktualnego
zapytanie, o ile taki wyst�puje, np. "Keep-Alive".
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>$HTTP_HOST</term>
<listitem>
<simpara>
Zawarto�� nag��wka <literal>Host:</literal> z aktualnego
zapytanie, o ile taki wyst�puje.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>$HTTP_REFERER</term>
<listitem>
<simpara>
Adres strony (o ile wyst�puje) z kt�rej przegl�darka przesz�a do tej
strony. Nag��wek jest tworzony przez przegl�dark� u�ytkownika; nie
wszystkie przegl�darki udost�pniaj� tak� informacj�.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>$HTTP_USER_AGENT</term>
<listitem>
<simpara>
Zawarto�� nag��wka <literal>User_Agent:</literal> z aktualnego
zapytania, o ile taki wyst�puje. Jest to napis identyfikuj�cy
oprogramowanie klienckie u�ywane do obejrzenia danej strony,
np. <computeroutput>Mozilla/4.5 [en] (X11; U; Linux
2.2.9 i586)</computeroutput>. Mo�na u�y� tej informacji
w po��czeniu z <function>get_browser</function>, aby dopasowa�
stron� do mo�liwo�ci przegl�darki u�ytkownika.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>$REMOTE_ADDR</term>
<listitem>
<simpara>
Numer IP zdalnego u�ytkownika przegl�daj�cego stron�.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>$REMOTE_PORT</term>
<listitem>
<simpara>
Port u�ywany na zdalnej maszynie, przez kt�ry nast�puje komunikacja
z serwerem.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>$SCRIPT_FILENAME</term>
<listitem>
<simpara>
Bezwzgl�dna �cie�ka do aktualnie wykonywanego skrytpu.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>$SERVER_ADMIN</term>
<listitem>
<simpara>
Warto�� podana w dyrektywie SERVER_ADMIN (dla Apache'a) w pliku
kofiguracyjnym serwera. Je�li skrypt jest uruchomiony na ho�cie
wirtualnym, wtedy b�dzie to warto�� okre�lona dla tego hosta
wirtualnego.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>$SERVER_PORT</term>
<listitem>
<simpara>
Port na serwerze, u�ywany przez serwer www do komunikacji. Domy�lnie
jest to "80"; przy u�yciu SSL, na przyk�ad, b�dzie to numer portu
na kt�rym odbywaj� si� zabezpieczone po��czenia HTTP.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>$SERVER_SIGNATURE</term>
<listitem>
<simpara>
Napis zawieraj�cy nazw� i wersj� serwera, oraz nazw� wirtualnego hosta,
kt�ry jest dodawany do stron generowanych przez serwer, o ile w��czony.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>$PATH_TRANSLATED</term>
<listitem>
<simpara>
Bezwzgl�dna �cie�ka do pliku, oparta na systemie plik�w (a nie
wychodz�ca z folderu g��wnego serwera), okre�lona po wykonaniu przez
serwer ewentualnego mapowania �cie�ki wirtualnej do rzeczywistej.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>$SCRIPT_NAME</term>
<listitem>
<simpara>
Zawiera �cie�k� do aktualnego skryptu. Przydatne przy stronach, kt�re
maj� wskazywa� na siebie same.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>$REQUEST_URI</term>
<listitem>
<simpara>
URI, kt�ry zosta� podany, aby uzyska� dost�p do aktualnej strony,
np. "/index.html".
</simpara>
</listitem>
</varlistentry>
</variablelist>
</para>
</sect2>
<sect2 id="language.variables.predefined.environment">
<title>Zmienne �rodowiskowe</title>
<simpara>
Te zmienne s� importowane do przestrzeni nazw globalnych PHP ze �rodowiska
w jakim pracuje parser PHP. Wiele z nich jest udost�pnianych przez
pow�ok� systemu, w kt�rym pracuje PHP, a poniewa� r�ne systemy u�ywaj�
r�nych pow�ok, �cis�a lista nie jest mo�liwa. Zapoznaj si� z
dokumentacj� twojej pow�oki (shella), aby dowiedzie� si�, jakie zmienne
�rodowiskowe ona udost�pnia.
</simpara>
<simpara>
Niekt�re zmienne �rodowiskowe zawieraj� zmienne CGI, w zale�no�ci od tego
czy PHP pracuje jako modu� serwera, czy skrypt CGI.
</simpara>
</sect2>
<sect2 id="language.variables.predefined.php">
<title>Zmienne PHP</title>
<simpara>
Zmienne te tworzone s� przez PHP. Zmienne <varname>$HTTP_*_VARS</varname>
s� dost�pne tylko, je�li dyrektywa konfiguracyjna
<link linkend="ini.track-vars">track_vars</link> jest w��czona. Kiedy
dyrektywa jest w��czona, zmienne s� zawsze tworzone, nawet je�li s�
pustymi tablicami. Zabezpiecza to przed z�o�liwymi u�ytkownikami, kt�rzy
mogliby podszywa� swoje warto�ci pod te zmienne.
</simpara>
<note>
<para>
Od PHP 4.0.3 dyrektywa <link linkend="ini.track-vars">track_vars</link>
jest zawsze w��czona, niezale�nie od wpisu w pliku konfiguracyjnym.
</para>
</note>
<para>
Je�li dyrektywa <link
linkend="ini.register-globals">register_globals</link> jest w��czona,
wtedy te zmienne b�d� r�wnie� dost�pne jako zmienne globalne, tzn.
niezale�nie od tablic <varname>$HTTP_*_VARS</varname>. Dyrektywa ta
powinna by� u�ywana ostro�nie i wy��czona, je�li to mo�liwe. O ile zmienne
<varname>$HTTP_*_VARS</varname> s� bezpieczne, o tyle ich odpowiedniki
w postaci zmiennych globalnych mog� zosta� nadpisane przez argumenty
przekazane od klienta, mo�liwie, �e ze zwyk�ej z�o�liwo�ci u�ytkownika.
Je�li nie mo�esz wy��czy� <link
linkend="ini.register-globals">register_globals</link>, musisz podj��
wszystkie niezb�dne kroki w celu zabezpieczenia danych przed sfa�szowaniem.
</para>
<para>
<variablelist>
<varlistentry>
<term>$argv</term>
<listitem>
<simpara>
Tablica argument�w przekazanych do skryptu. Kiedy skrypt jest
uruchamiany z linii polece�, daje ona dost�p w stylu j�zyka C
do prze��cznik�w, z jakimi zosta� wywo�any skrypt. Kiedy skrypt
zostanie wywo�any metod� GET, tablica b�dzie zawiera� �a�cuch znak�w
zapytania (query string).
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>$argc</term>
<listitem>
<simpara>
Liczba argument�w przekazanych do skryptu (je�li uruchamiany z linii
polece�).
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>$PHP_SELF</term>
<listitem>
<simpara>
Nazwa pliku aktualnie wykonywanego skryptu, ze �cie�k� wzgl�dn� od
g��wnego katalogu (document root). Je�li PHP jest wywo�ane z linii
polece�, zmienna jest niedost�pna.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>$HTTP_COOKIE_VARS</term>
<listitem>
<simpara>
Tablica asocjacyjna zmiennych przekazanych do skryptu przez ciasteczka
HTTP.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>$HTTP_GET_VARS</term>
<listitem>
<simpara>
Tablica asocjacyjna zmiennych przekazanych do skryptu metod� GET
protoko�u HTTP.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>$HTTP_POST_VARS</term>
<listitem>
<simpara>
Tablica asocjacyjna zmiennych przekazanych do skryptu metod� POST
protoko�u HTTP.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>$HTTP_POST_FILES</term>
<listitem>
<simpara>
Tablica asocjacyjna zmiennych zawieraj�cych informacj� o plikach
wys�anych do serwera (uploadowanych) metod� POST. Zobacz <link
linkend="features.file-upload.post-method">wysy�anie plik�w metod� POST
</link> aby dowiedzie� si� wi�cej na temat zawarto�ci
<varname>$HTTP_POST_FILES</varname>.
</simpara>
<para>
<varname>$HTTP_POST_FILES</varname> jest dost�pna tylko w PHP 4.0.0
i p�niejszych.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>$HTTP_ENV_VARS</term>
<listitem>
<simpara>
Tablica asocjacyjna zmiennych przekazanych do skryptu ze �rodowiska
operacyjnego serwera.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>$HTTP_SERVER_VARS</term>
<listitem>
<simpara>
Tablica asocjacyjna zmiennych przekazanych do skryptu z serwera HTTP.
Zmienne te s� analogiczne do zmiennych Apache'a, opisanych powy�ej.
</simpara>
</listitem>
</varlistentry>
</variablelist>
</para>
</sect2>
</sect1>
<sect1 id="language.variables.scope">
<title>Zasi�g zmiennych</title>
<simpara>
Zasi�g zmiennej jest zale�ny od miejsca, w jakim zosta�a zdefiniowana.
Najcz�ciej zmienne PHP widoczne s� tylko w pojedynczym zasi�gu. Taki zasi�g
rozci�ga si�
na pliki do��czane funkcjami <function>include</function> i
<function>require</function>. Na przyk�ad:
</simpara>
<informalexample>
<programlisting role="php">
<![CDATA[
$a = 1;
include "b.inc";
]]>
</programlisting>
</informalexample>
<simpara>
Tutaj zmienna <varname>$a</varname> b�dzie dost�pna tak�e w do��czonym
pliku <filename>b.inc</filename>. Jednak�e w funkcjach zdefiniowanych
przez u�ytkownika zmienne maj� zasi�g lokalny. Ka�da zmienna u�yta wewn�trz
funkcji jest domy�lnie ograniczona do zasi�gu lokalnego, np.
</simpara>
<informalexample>
<programlisting role="php">
<![CDATA[
$a = 1; /* zasi�g globalny */
function Test()
{
echo $a; /* odwo�anie do zmiennej o zasi�gu lokalnym */
}
Test();
]]>
</programlisting>
</informalexample>
<simpara>
Ten skrypt nie wy�wietli niczego, poniewa� instrukcja echo odwo�uje si� do
zmiennej lokalnej <varname>$a</varname>, kt�rej jak dot�d nie zosta�a
przypisana �adna warto��. Mo�na tu zauwa�y� r�nic� w stosunku do j�zyka C,
gdzie zmienne globalne s� zawsze dost�pne wewn�trz definicji funkcji, o ile
nie zosta�y nadpisane przez lokaln� definicj�. zmiennej. Mo�e to spowodowa�
taki problem,
�e kto� mo�e nieodwracalnie zmieni� warto�� zmiennej globalnej.
W PHP zmienne globalne musz� by� jawnie okre�lnone jako globalne wewn�trz
funkcji, w kt�rej maj� by� u�yte, do czego u�ywamy s�owa kluczowego global.
Na przyk�ad:
</simpara>
<informalexample>
<programlisting role="php">
<![CDATA[
$a = 1;
$b = 2;
function Sum()
{
global $a, $b;
$b = $a + $b;
}
Sum();
echo $b;
]]>
</programlisting>
</informalexample>
<simpara>
Powy�szy skrypt wy�wietli wynik "3". Przez zadeklarowanie
wewn�trz funkcji globalno�ci zmiennych <varname>$a</varname> i
<varname>$b</varname>, wszystkie odwo�ania do tych zmiennych
b�d� odnosi�y si� do ich globalnych wersji. Nie ma �adnych ogranicze�
w ilo�ci zmiennych globalnych, na kt�rych chcemy operowa� wewn�trz funkcji.
</simpara>
<simpara>
Drugim sposobem uzyskania dost�pu do zmiennych globalnych wewn�trz funkcji
jest u�ycie specjalnej, zdefiniowanej przez PHP tablicy
<varname>$GLOBALS</varname>. Powy�szy przyk�ad mo�na zatem przepisa� tak:
</simpara>
<informalexample>
<programlisting role="php">
<![CDATA[
$a = 1;
$b = 2;
function Sum()
{
$GLOBALS["b"] = $GLOBALS["a"] + $GLOBALS["b"];
}
Sum();
echo $b;
]]>
</programlisting>
</informalexample>
<simpara>
<varname>$GLOBALS</varname> jest tablic� asocjacyjn�, gdzie nazwa zmiennej
jest kluczem, a zawarto�� zmiennej warto�ci� kom�rki tablicy.
</simpara>
<simpara>
Jeszcze jedn� wa�n� rzecz�, zwi�zan� z zasi�giem zmiennych jest zmienna
statyczna (ang. <emphasis>static</emphasis> variable). Zmienna statyczna
mo�e mie� wy��cznie zasi�g lokalny, ale nie traci swojej warto�ci, kiedy
program opu�ci ten zasi�g lokalny, w kt�rym dana zmienna statyczna si�
znajduje. Prosz� rozwa�y� poni�szy przyk�ad:
</simpara>
<informalexample>
<programlisting role="php">
<![CDATA[
function Test ()
{
$a = 0;
echo $a;
$a++;
}
]]>
</programlisting>
</informalexample>
<simpara>
Ta funkcja jest bezu�yteczna, gdy� przy ka�dym jej wywo�aniu zmienna
<varname>$a</varname> otrzymuje warto�� <literal>0</literal>, w zwi�zku
z czym funkcja stale wy�wietla "0". Wyst�puj�ca potem
inkrementacja <varname>$a</varname>++ nie ma �adnego znaczenia, gdy�
funkcja si� ko�czy i zmienna <varname>$a</varname> znika. Aby powy�sza
funkcja mia�a jaki� sens, nale�y zapobiec gubieniu warto�ci
<varname>$a</varname>, do czego u�ywamy s�owa kluczowego static:
</simpara>
<informalexample>
<programlisting role="php">
<![CDATA[
function Test()
{
static $a = 0;
echo $a;
$a++;
}
]]>
</programlisting>
</informalexample>
<simpara>
Teraz, za ka�dym wywo�aniem funkcji test, zostanie wy�wietlona warto��
zmiennej <varname>$a</varname>, po czym ta zmienna zostanie inkrementowana.
</simpara>
<simpara>
Zmienne statyczne pozwalaj� te� na wykorzystanie funkcji rekurencyjnych,
czyli takich, kt�re wywo�uj� same siebie. Funkcje rekurencyjne nale�y
pisa� ostro�nie, gdy� �atwo jest wywo�a� niesko�czon� rekurencj�. Musisz
by� pewny, �e masz odpowiednie mechanizmy do zatrzymania rekurencji
w pewnym momencie. Poni�sza funkcja rekurencyjnie liczy do 10, u�ywaj�c
zmiennej statycznej <varname>$licznik</varname>, aby wiedzie�, kiedy ma
si� zatrzyma�:
</simpara>
<informalexample>
<programlisting role="php">
<![CDATA[
function Test()
{
static $licznik = 0;
$licznik++;
echo $licznik;
if ($licznik < 10) {
Test ();
}
$licznik--;
}
]]>
</programlisting>
</informalexample>
</sect1>
<sect1 id="language.variables.variable">
<title>Zmienne zmienne</title>
<simpara>
W niekt�rych przypadkach jest wygodne, by m�c u�y� zmiennej o zmiennej
nazwie. To znaczy zmiennej, kt�rej nazwa mo�e by� zmieniana dynamicznie.
Zwyk�a zmienna jest ustawiana wyra�eniem jak poni�ej:
</simpara>
<informalexample>
<programlisting role="php">
<![CDATA[
$a = "witaj";
]]>
</programlisting>
</informalexample>
<simpara>
Zmienna zmienna pobiera warto�� jednej zmiennej i traktuje j� jako nazw�
zmiennej. W powy�szym przyk�adzie, <emphasis>witaj</emphasis> mo�e sta�
si� nazw� zmiennej, przy u�yciu dw�ch znak�w dolara, tzn.
</simpara>
<informalexample>
<programlisting role="php">
<![CDATA[
$$a = "�wiecie";
]]>
</programlisting>
</informalexample>
<simpara>
W tym momencie dwie zmienne zosta�y zdefiniowane i umieszczone w drzewie
symbolicznym PHP: <varname>$a</varname> zawieraj�ca "witaj" i
<varname>$witaj</varname> zawieraj�ca "�wiecie". Zatem poni�szy zapis:
</simpara>
<informalexample>
<programlisting role="php">
<![CDATA[
echo "$a ${$a}";
]]>
</programlisting>
</informalexample>
<simpara>
znaczy to samo, co:
</simpara>
<informalexample>
<programlisting role="php">
<![CDATA[
echo "$a $witaj";
]]>
</programlisting>
</informalexample>
<simpara>
tzn. obydwa wy�wietl�: <computeroutput>witaj �wiecie</computeroutput>.
</simpara>
<simpara>
Aby u�ywa� zmiennych zmiennych jako tablic, trzeba rozwi�za� pewn�
niejasno��. Mianowicie, je�li napiszesz <varname>$$a[1]</varname>, parser
musi wiedzie�, czy chesz u�y� <varname>$a[1]</varname> jako nazwy zmiennej,
czy <varname>$$a</varname> jako nazwy tablicy, kt�rej rekord [1] ci�
interesuje. W tym przypadku nale�y zastosowa� odr�bn� sk�adni�:
<varname>${$a[1]}</varname> dla pierwszego przypadku a
<varname>${$a}[1]</varname> dla drugiego.
</simpara>
</sect1>
<sect1 id="language.variables.external">
<title>Zmienne spoza PHP</title>
<sect2 id="language.variables.external.form">
<title>Formularze HTML (GET i POST)</title>
<simpara>
Kiedy do skryptu PHP zostanie wys�any formularz, ka�da zmienna z tego
formularza zostanie automatycznie dostarczona do tego skryptu przez PHP.
Je�li dyrektywa <link linkend="ini.track-vars">track_vars</link> jest
w��czona, to zmienne te b�d� umieszczone w tablicach asocjacyjnych
<varname>$HTTP_POST_VARS</varname> (zmienne wys�ane metod� POST),
<varname>$HTTP_GET_VARS</varname> (zmienne wys�ane metod� GET), i/lub
<varname>$HTTP_POST_FILES</varname> (plik wys�ane metod� POST),
w zale�no�ci od rodzaju zmiennych w zapytaniu.
</simpara>
<para>
Wi�cej informacji na ten temat w rozdziale <link
linkend="language.variables.predefined">Zmienne predefiniowane</link>.
</para>
<para>
<example>
<title>Prosty formularz ze zmienn�</title>
<programlisting role="php">
<![CDATA[
<form action="foo.php" method="post">
Name: <input type="text" name="username"><br>
<input type="submit">
</form>
]]>
</programlisting>
</example>
</para>
<para>
Kiedy powy�szy formularz zostanie wys�any, warto�� wprowadzona do pola
tekstowego b�dzi� dost�pna w
<varname>$HTTP_POST_VARS['username']</varname>. Je�li dyrektywa <link
linkend="ini.register-globals">register_globals</link> jest w��czona,
zmienna z formularza b�dzie tak�e dost�pna jako zmienna globalna
<varname>$username</varname>.
</para>
<note>
<para>
Dyrektywa konfiguracyjna
<link linkend="ini.magic-quotes-gpc">magic_quotes_gpc</link> oddzia�uje
na zmienne z Get, Post i Cookie. Je�li w��czona, tekst (It's "PHP!")
automagicznie zmieni si� w (It\'s \"PHP!\"). Jest to potrzebne przy
wpisywaniu danych do baz danych. Zobacz te�
<function>addslashes</function>, <function>stripslashes</function> i
<link linkend="ini.magic-quotes-sybase">magic_quotes_sybase</link>.
</para>
</note>
<simpara>
PHP obs�uguje tak�e tablice w kontek�cie zmiennych z formularzy
(zajrzyj do <link linkend="faq.html">FAQ</link>). Mo�na na przyk�ad
pogrupowa� razem powi�zane zmienne lub u�y� tej mo�liwo�ci do pobrania
warto�ci z pola wyboru (select):
</simpara>
<para>
<example>
<title>Bardziej z�o�one zmienne w formularzach</title>
<programlisting role="php">
<![CDATA[
<form action="array.php" method="post">
Nazwisko: <input type="text" name="personal[nazwisko]"><br>
Email: <input type="text" name="personal[email]"><br>
Piwo: <br>
<select multiple name="piwo[]">
<option value="zywiec">�ywiec
<option value="lech">Lech
<option value="cooler">Cooler
</select>
<input type="submit">
</form>
]]>
</programlisting>
</example>
</para>
<para>
W PHP 3 tablice w formularzach mog�y by� tylko jednowymiarowe. W PHP 4 nie
ma takich ogranicze�.
</para>
<sect3 id="language.variables.external.form.submit">
<title>Nazwy zmiennych dla SUBMIT w postaci obrazka</title>
<simpara>
Przy tworzeniu formularza, mo�na u�y� obrazka, zamiast standardowego
przycisku Wy�lij, za pomoc� takiego znacznika:</simpara>
<informalexample>
<programlisting role="php">
<![CDATA[
<input type="image" src="image.gif" name="sub">
]]>
</programlisting>
</informalexample>
<simpara>
Kiedy u�ytkownik kliknie gdzie� na obrazku, formularz, kt�rego to dotyczy,
zostanie wys�any do serwera z dwiema dodatkowymi zmiennymi, sub_x i sub_y.
Zawieraj� one koordynaty miejsca klikni�cia na obrazek. Mo�na przy tym
zauwa�y�, �e w nazwach zmiennych jest kropka a nie podkre�lnik, ale PHP
konwertuje kropk� na podkre�lnik automatycznie. (Zobacz <link
linkend="language.variables.external.dot-in-names">Kropki w nazwach
nadchodz�cych zmiennych</link>).
</simpara>
</sect3>
</sect2>
<sect2 id="language.variables.external.cookies">
<title>Ciasteczka HTTP</title>
<simpara>
PHP bez problemu obs�uguje ciasteczka HTTP, takie jak zdefiniowano w <ulink
url="&spec.cookies;">Specyfikacji Netscape'a</ulink>. Ciasteczka s�
mechanizmem przechowywania informacji w przegl�darce klienta w celu
�ledzenia lub identyfikowania sta�ych bywalc�w strony. Ciasteczka ustawia
si� za pomoc� funkcji <function>setcookie</function>. Ciasteczka s� cz�ci�
nag��wka HTTP, wi�c funkcja SetCookie musi by� wywo�ana zanim jakakolwiek
inna informacja zostanie wys�ana do przegl�darki. Takie samo ograniczenie
dotyczy funkcji <function>header</function>. Wszystkie ciasteczka odebrane
od klienta zostan� automatycznie zamienione w zmienne PHP, podobnie jak
dane odebrane metod� GET lub POST.
</simpara>
<simpara>
Je�li chcesz przypisa� wiele warto�ci do jednego ciasteczka, dodaj
<emphasis>[]</emphasis> do jego nazwy. Na przyk�ad:
</simpara>
<informalexample>
<programlisting role="php">
<![CDATA[
setcookie("MyCookie[]", "Testing", time()+3600);
]]>
</programlisting>
</informalexample>
<simpara>
Pami�taj, �e wys�ane ciasteczko zast�pi wcze�niejsze ciasteczko o tej
nazwie, o ile �cie�ka lub domena nie s� r�ne. Na przyk�ad dla koszyka
do zakup�w mo�esz potrzebowa� licznika a jego warto�� stale przekazywa�
dalej, tzn.
</simpara>
<example>
<title>Przyk�ad zastosowania SetCookie</title>
<programlisting role="php">
<![CDATA[
$ilosc++;
setcookie("ilosc", $ilosc, time()+3600);
setcookie("koszyk[$ilosc]", $towar, time()+3600);
P&]]>
</programlisting>
</example>
</sect2>
<sect2 id="language.variables.external.environment">
<title>Zmienne �rodowiskowe</title>
<para>
PHP samoczynnie udost�pnia zmienne �rodowiskowe jak zwyk�e zmienne PHP.
<informalexample>
<programlisting role="php">
<![CDATA[
echo $HOME; /* Wy�wietli zmienn� �rodowiskow� HOME, o ile ta ma jak�� warto��
*/
]]>
</programlisting>
</informalexample>
</para>
<para>
Poniewa� informacje nadchdz�ce przez GET, POST i ciasteczka r�wnie�
s� udost�pniane jako zmienne, czasem jest lepiej odczyta� zmienne
�rodowiskowe bezpo�rednio ze �rodowiska, aby mie� pewno��, �e otrzymuje si�
prawdziw� warto�� zmiennej. W tym celu u�ywa si� funkcji
<function>getenv</function>. Mo�na tak�e samodzielnie ustawi� warto��
zmiennej �rodowiskowej za pomoc� funkcji <function>putenv</function>.
</para>
</sect2>
<sect2 id="language.variables.external.dot-in-names">
<title>Kropki w nazwach nadchodz�cych zmiennych</title>
<para>
PHP normalnie nie zmienia nazw zmiennych przekazywanych do skryptu.
Jednak�e nale�y pami�ta�, �e kropka "." nie jest poprawnym znakiem w
nazwie zmiennej. Dlaczego, prosz� spojrze� na to:
<programlisting role="php">
<![CDATA[
$varname.ext; /* niepoprawna nazwa zmiennej */
]]>
</programlisting>
To co widzi parser, to zmienna o nazwie <varname>$varname</varname>, po
kt�rej pojawia si� operator konkatenacji, a nast�pnie pusty �a�cuch (czyli
taki, kt�ry nie jest �adnym s�owem kluczowym, ani zarezerwowanym) "ext".
Oczywi�cie, nie daje to �adnego sensownego wyniku.
</para>
<para>
Warto zatem wiedzie�, �e PHP automatycznie zast�pi podkre�lnikiem
"_" ka�d� kropk� w nazwie nadchodz�cej zmiennej.
</para>
</sect2>
<sect2 id="language.variables.determining-type-of">
<title>Okre�lanie typ�w zmiennych</title>
<para>
Poniewa� PHP samodzielnie okre�la typy zmiennych i konwertuje je
(zasadniczo) jak potrzeba, nie zawsze jest jasne, jakiego typu jest dana
zmienna w danym momencie. PHP zawiera kilka funkcji do okre�lania typ�w
zmiennych. S� to:
<function>gettype</function>, <function>is_long</function>,
<function>is_double</function>, <function>is_string</function>,
<function>is_array</function>i
<function>is_object</function>.
</para>
</sect2>
</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
-->