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
    (&amp;) 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 &quot;3&quot;. 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 &quot;0&quot;. 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]">&lt;br>
    Email: <input type="text" name="personal[email]">&lt;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
-->

Reply via email to