cvs: phpdoc-ru /language variables.xml

From: Date: Wed, 14 Jan 2004 21:04:42 +0000
Subject: cvs: phpdoc-ru /language variables.xml
Groups: php.doc.ru 
Request: Send a blank email to doc-ru+get-179@lists.php.net to get a copy of this message
kai Wed Jan 14 16:04:42 2004 EDT Added files: /phpdoc-ru/language variables.xml Log: Translated

Index: phpdoc-ru/language/variables.xml +++ phpdoc-ru/language/variables.xml <?xml version="1.0" encoding="windows-1251"?> <!-- EN-Revision: 1.74 Maintainer: Kai Status: ready --> <!-- $Revision: 1.1 $ --> <chapter id="language.variables"> <title>Ïåðåìåííûå</title> <sect1 id="language.variables.basics"> <title>Îñíîâû</title> <simpara> Ïåðåìåííûå â PHP ïðåäñòàâëåíû çíàêîì äîëëàðà ñ ïîñëåäóþùèì èìåíåì ïåðåìåííîé. Èìÿ ïåðåìåííîé ÷óâñòâèòåëüíî ê ðåãèñòðó. </simpara> <para> Èìåíà ïåðåìåííûõ ñîîòâåòñòâóþò òåì æå ïðàâèëàì, ÷òî è îñòàëüíûå íàèìåíîâàíèÿ â PHP. Ïðàâèëüíîå èìÿ ïåðåìåííîé äîëæíî íà÷èíàòüñÿ ñ áóêâû èëè ñèìâîëà ïîä÷åðêèâàíèÿ ñ ïîñëåäóþùèìè â ëþáîì êîëè÷åñòâå áóêâàìè, öèôðàìè èëè ñèìâîëàìè ïîä÷åðêèâàíèÿ Ýòî ìîæíî îòîáðàçèòü ðåãóëÿðíûì âûðàæåíèåì: '[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*' </para> <note> <simpara> Äëÿ íàøèõ öåëåé áóêâû çäåñü - ýòî a-z, A-Z, è ASCII-ñèìâîëû ñî 127 ïî 255 (0x7f-0xff). </simpara> </note> <para> <informalexample> <programlisting role="php"> <![CDATA[ <?php $var = "Bob"; $Var = "Joe"; echo "$var, $Var"; // âûâåäåò "Bob, Joe" $4site = 'not yet'; // íåâåðíî; íà÷èíàåòñÿ ñ öèôðû $_4site = 'not yet'; // âåðíî; íà÷èíàåòñÿ ñ ñèìâîëà ïîä÷åðêèâàíèÿ $täyte = 'mansikka'; // âåðíî; 'ä' ýòî (Äîïîëíèòåëüíûé) ASCII 228. ?> ]]> </programlisting> </informalexample> </para> <para>  PHP 3 ïåðåìåííûå âñåãäà ïðèñâàèâàëèñü ïî çíà÷åíèþ. Òî åñòü, êîãäà âû ïðèñâàèâàåòå âûðàæåíèå ïåðåìåííîé, âñå çíà÷åíèå îðèãèíàëüíîãî âûðàæåíèÿ êîïèðóåòñÿ â ýòó ïåðåìåííóþ. Ýòî îçíà÷àåò, ê ïðèìåðó, ÷òî ïîñëå ïðèñâîåíèÿ îäíîé ïåðåìåííîé çíà÷åíèÿ äðóãîé, èçìåíåíèå îäíîé èç íèõ íå âëèÿåò íà çíà÷åíèå äðóãîé. Äîïîëíèòåëüíóþ èíôîðìàöèþ îá ýòîì ñïîñîáå ïðèñâîåíèÿ ñìîòðèòå â ðàçäåëå <link linkend="language.expressions">Âûðàæåíèÿ</link>. </para> <para> PHP 4 ïðåäëàãàåò èíîé ñïîñîá ïðèñâîåíèÿ çíà÷åíèé ïåðåìåííûì: <link linkend="language.references">ïðèñâîåíèå ïî ññûëêå</link>. Ýòî îçíà÷àåò, ÷òî íîâàÿ ïåðåìåííàÿ ïðîñòî ññûëàåòñÿ (èíà÷å ãîâîðÿ, "ñòàíîâèòñÿ ïñåâäîíèìîì" èëè "óêàçûâàåò") íà îðèãèíàëüíóþ ïåðåìåííóþ. Èçìåíåíèÿ â îäíîé ïåðåìåííîé îòðàæàþòñÿ íà îðèãèíàëå, è íàîáîðîò. Ýòî òàêæå îçíà÷àåò, ÷òî êîïèðîâàíèÿ íå ïðîèñõîäèò; òàêèì îáðàçîì, ïðèñâîåíèå îñóùåñòâëÿåòñÿ áûñòðåå. Îäíàêî, ëþáîå óâåëè÷åíèå ñêîðîñòè áóäåò õîðîøî çàìåòíî òîëüêî â ñæàòûõ öèêëàõ èëè ïðè ïðèñâîåíèè áîëüøèõ <link linkend="language.types.array">ìàññèâîâ</link> èëè <link linkend="language.types.object">îáúåêòîâ</link>. </para> <para> Äëÿ ïðèñâîåíèÿ ïî ññûëêå, ïðîñòî äîáàâüòå àìïåðñàíä (&amp;) ê íà÷àëó èìåíè ïðèñâàèâàåìîé (èñõîäíîé) ïåðåìåííîé. Íàïðèìåð, ñëåäóþùèé ôðàãìåíò êîäà äâàæäû âûâîäèò 'My name is Bob': <informalexample> <programlisting role="php"> <![CDATA[ <?php $foo = 'Bob'; // Ïðèñâàèâàåò $foo çíà÷åíèå 'Bob' $bar = &$foo; // Ññûëêà íà $foo ÷åðåç $bar. $bar = "My name is $bar"; // Èçìåíåíèå $bar... echo $bar; echo $foo; // ìåíÿåò è $foo. ?> ]]> </programlisting> </informalexample> </para> <para> Âàæíî îòìåòèòü, ÷òî ïî ññûëêå ìîãóò áûòü ïðèñâîåíû òîëüêî èìåíîâàííûå ïåðåìåííûå. <informalexample> <programlisting role="php"> <![CDATA[ <?php $foo = 25; $bar = &$foo; // Ýòî âåðíîå ïðèñâîåíèå. $bar = &(24 * 7); // Íåâåðíî; ññûëêà íà íåèìåíîâàííîå âûðàæåíèå. function test() { return 25; } $bar = &test(); // Íåâåðíî. ?> ]]> </programlisting> </informalexample> </para> </sect1> <sect1 id="language.variables.predefined"> <title>Ïðåäîïðåäåëåííûå ïåðåìåííûå</title> <simpara> Ëþáîìó çàïóñêàåìîìó ñêðèïòó PHP ïðåäîñòàâëÿåò áîëüøîå êîëè÷åñòâî ïðåäîïðåäåëåííûõ ïåðåìåííûõ. Îäíàêî, ìíîãèå èç ýòèõ ïåðåìåííûõ íå ìîãóò áûòü ïîëíîñòüþ çàäîêóìåíòèðîâàíû, ïîñêîëüêó îíè çàâèñÿò îò çàïóùåííîãî ñåðâåðà, åãî âåðñèè è íàñòðîåê, à òàêæå äðóãèõ ôàêòîðîâ. Íåêîòîðûå èç ýòèõ ïåðåìåííûõ íå äîñòóïíû, êîãäà PHP çàïóùåí èç <link linkend="features.commandline">êîìàíäíîé ñòðîêè</link>. Ïåðå÷åíü ýòèõ ïåðåìåííûõ ñìîòðèòå â ðàçäåëå <link linkend="reserved.variables">Çàðåçåðâèðîâàííûå ïðåäîïðåäåëåííûå ïåðåìåííûå</link>. </simpara> <warning> <simpara> Íà÷èíàÿ ñ PHP 4.2.0, çíà÷åíèå äèðåêòèâû <link linkend="ini.register-globals">register_globals</link> ïî óìîë÷àíèþ óñòàíîâëåíî â <emphasis>off</emphasis> (îòêëþ÷åíî). Ýòî áîëüøîå èçìåíåíèå â PHP. Ïîëîæåíèå register_globals â <emphasis>off</emphasis> äåëàåò ïðåäîïðåäåëåííûå ïåðåìåííûå äîñòóïíûìè â ãëîáàëüíîé îáëàñòè âèäèìîñòè. Íàïðèìåð, ÷òîáû ïîëó÷èòü <varname>DOCUMENT_ROOT</varname>, âàì íåîáõîäèìî áóäåò èñïîëüçîâàòü <varname>$_SERVER['DOCUMENT_ROOT']</varname> âìåñòî <varname>$DOCUMENT_ROOT</varname>, èëè <varname>$_GET['id']</varname> èç URL <literal>http://www.example.com/test.php?id=3</literal> âìåñòî <varname>$id</varname>, èëè <varname>$_ENV['HOME']</varname> âìåñòî <varname>$HOME</varname>. </simpara> <simpara> Äîïîëíèòåëüíóþ èíôîðìàöèþ, ñâÿçàííóþ ñ ýòèì èçìåíåíèåì, âû ìîæåòå ïîëó÷èòü, ïðî÷èòàâ îïèñàíèå <link linkend="ini.register-globals">register_globals</link> â ðàçäåëå î íàñòðîéêàõ, ãëàâó î áåçîïàñíîñòè <link linkend="security.registerglobals">Èñïîëüçîâàíèå Register Globals </link>, à òàêæå ñîîáùåíèÿ î âûïóñêàõ PHP <ulink url="&url.php.release4.1.0;">4.1.0 </ulink> è <ulink url="&url.php.release4.2.0;">4.2.0</ulink>. </simpara> <simpara> Èñïîëüçîâàíèå äîñòóïíûõ çàðåçåðâèðîâàííûõ ïðåäîïðåäåëåííûõ ïåðåìåííûõ PHP, òàêèõ êàê <link linkend="language.variables.superglobals">ñóïåðãëîáàëüíûå ìàññèâû</link>, ÿâëÿåòñÿ ïðåäïî÷òèòåëüíûì. </simpara> </warning> <simpara> Íà÷èíàÿ ñ âåðñèè 4.1.0, PHP ïðåäîñòàâëÿåò äîïîëíèòåëüíûé íàáîð ïðåäîïðåäåëåííûõ ìàññèâîâ, ñîäåðæàùèõ ïåðåìåííûå web-ñåðâåðà (åñëè îíè äîñòóïíû), îêðóæåíèÿ è ïîëüçîâàòåëüñêîãî ââîäà. Ýòè íîâûå ìàññèâû ÿâëÿþòñÿ îñîáûìè, ïîñêîëüêó îíè àâòîìàòè÷åñêè ãëîáàëüíû--òî åñòü, àâòîìàòè÷åñêè äîñòóïíû â ëþáîé îáëàñòè âèäèìîñòè. Ïî ýòîé ïðè÷èíå îíè òàêæå èçâåñòíû êàê 'àâòîãëîáàëüíûå' èëè 'ñóïåðãëîáàëüíûå' ïåðåìåííûå. ( PHP íåò ìåõàíèçìà îïðåäåëÿåìûõ ïîëüçîâàòåëåì ñóïåðãëîáàëüíûõ ïåðåìåííûõ.) Ñóïåðãëîáàëüíûå ïåðåìåííûå ïåðå÷èñëåíû íèæå; îäíàêî, ïåðå÷èñëåíèå èõ ñîäåðæèìîãî è äàëüíåéøåå îáñóæäåíèå ïðåäîïðåäåëåííûõ ïåðåìåííûõ PHP è èõ ñóòè ñìîòðèòå â ðàçäåëå <link linkend="reserved.variables">Çàðåçåðâèðîâàííûå ïðåäîïðåäåëåííûå ïåðåìåííûå</link>. Òàêæå âû çàìåòèòå, ÷òî ñòàðûå ïðåäîïðåäåëåííûå ïåðåìåííûå (<varname>$HTTP_*_VARS</varname>) âñå åùå ñóùåñòâóþò. &avail.register-long-arrays; </simpara> <note> <title>Ïåðåìåííûå ïåðåìåííûõ</title> <para> Ñóïåðãëîáàëüíûå ïåðåìåííûå íå ìîãóò áûòü <link linkend="language.variables.variable">ïåðåìåííûìè ïåðåìåííûõ</link>. </para> </note> <para> Åñëè íåêîòîðûå èç ïåðåìåííûõ â <link linkend="ini.variables-order">variables_order</link> íå óñòàíîâëåíû, ñîîòâåòñòâóþùèå èì ïðåäîïðåäåëåííûå ìàññèâû òàêæå îñòàíóòñÿ ïóñòûìè. </para> <variablelist id="language.variables.superglobals"> <title>Ñóïåðãëîáàëüíûå ïåðåìåííûå PHP</title> <varlistentry> <term><link linkend="reserved.variables.globals">$GLOBALS</link></term> <listitem> <simpara> Ñîäåðæèò ññûëêó íà êàæäóþ ïåðåìåííóþ, äîñòóïíóþ â äàííûé ìîìåíò â ãëîáàëüíîé îáëàñòè âèäèìîñòè ñêðèïòà. Êëþ÷àìè ýòîãî ìàññèâà ÿâëÿþòñÿ èìåíà ãëîáàëüíû ïåðåìåííûõ. <varname>$GLOBALS</varname> ñóùåñòâóåò, íà÷èíàÿ ñ PHP 3. </simpara> </listitem> </varlistentry> <varlistentry> <term><link linkend="reserved.variables.server">$_SERVER</link></term> <listitem> <simpara> Ïåðåìåííûå, óñòàíîâëåííûå web-ñåðâåðîì ëèáî íàïðÿìóþ ñâÿçàííûå ñ îêðóæåíèåì âûïîëíåíèÿ òåêóùåãî ñêðèïòà. Àíàëîã ñòàðîãî ìàññèâà <varname>$HTTP_SERVER_VARS</varname> (êîòîðûé ïî-ïðåæíåìó äîñòóïåí, íî íå ðåêîìåíäóåòñÿ). </simpara> </listitem> </varlistentry> <varlistentry> <term><link linkend="reserved.variables.get">$_GET</link></term> <listitem> <simpara> Ïåðåìåííûå, ïåðåäàâàåìûå ñêðèïòó ÷åðåç HTTP GET. Àíàëîã ñòàðîãî ìàññèâà <varname>$HTTP_GET_VARS</varname> (êîòîðûé ïî-ïðåæíåìó äîñòóïåí, íî íå ðåêîìåíäóåòñÿ). </simpara> </listitem> </varlistentry> <varlistentry> <term><link linkend="reserved.variables.post">$_POST</link></term> <listitem> <simpara> Ïåðåìåííûå, ïåðåäàâàåìûå ñêðèïòó ÷åðåç HTTP POST. Àíàëîã ñòàðîãî ìàññèâà <varname>$HTTP_POST_VARS</varname> (êîòîðûé ïî-ïðåæíåìó äîñòóïåí, íî íå ðåêîìåíäóåòñÿ). </simpara> </listitem> </varlistentry> <varlistentry> <term><link linkend="reserved.variables.cookies">$_COOKIE</link></term> <listitem> <simpara> Ïåðåìåííûå, ïåðåäàâàåìûå ñêðèïòó ÷åðåç HTTP cookies. Àíàëîã ñòàðîãî ìàññèâà <varname>$HTTP_COOKIE_VARS</varname> array (êîòîðûé ïî-ïðåæíåìó äîñòóïåí, íî íå ðåêîìåíäóåòñÿ). </simpara> </listitem> </varlistentry> <varlistentry> <term><link linkend="reserved.variables.files">$_FILES</link></term> <listitem> <simpara> Ïåðåìåííûå, ïåðåäàâàåìûå ñêðèïòó ÷åðåç HTTP post-çàãðóçêó ôàéëîâ. Àíàëîã ñòàðîãî ìàññèâà <varname>$HTTP_POST_FILES</varname> (êîòîðûé ïî-ïðåæíåìó äîñòóïåí, íî íå ðåêîìåíäóåòñÿ). Äëÿ äîïîëíèòåëüíîé èíôîðìàöèè ñìîòðèòå <link linkend="features.file-upload.post-method">Çàãðóçêà ìåòîäîì POST</link>. </simpara> </listitem> </varlistentry> <varlistentry> <term><link linkend="reserved.variables.environment">$_ENV</link></term> <listitem> <simpara> Ïåðåìåííûå, ïåðåäàâàåìûå ñêðèïòó ÷åðåç îêðóæåíèå. Àíàëîã ñòàðîãî ìàññèâà <varname>$HTTP_ENV_VARS</varname> (êîòîðûé ïî-ïðåæíåìó äîñòóïåí, íî íå ðåêîìåíäóåòñÿ). </simpara> </listitem> </varlistentry> <varlistentry> <term><link linkend="reserved.variables.request">$_REQUEST</link></term> <listitem> <simpara> Ïåðåìåííûå, ïåðåäàâàåìûå ñêðèïòó ÷åðåç ìåõàíèçìû ââîäà GET, POST è COOKIE, è êîòîðûì, ñëåäîâàòåëüíî, íåëüçÿ äîâåðÿòü. Íàëè÷èå è ïîðÿäîê âêëþ÷åíèÿ ïåðåìåííûõ â ýòîò ìàññèâ îïðåäåëÿåòñÿ â ñîîòâåòñòâèè ñ äèðåêòèâîé êîíôèãóðàöèè PHP <link linkend="ini.variables-order">variables_order</link>. Ýòîò ìàññèâ íå èìååò ïðÿìûõ àíàëîãîâ â âåðñèÿõ PHP äî 4.1.0. Ñìîòðèòå òàêæå <function>import_request_variables</function>. </simpara> <caution> <simpara> Íà÷èíàÿ ñ PHP 4.3.0, èíôîðìàöèÿ î ôàéëå èç <varname>$_FILES</varname> áîëüøå íå ñóùåñòâóåò â <varname>$_REQUEST</varname>. </simpara> </caution> <note> <simpara> Ïðè çàïóñêå èç <link linkend="features.commandline">êîìàíäíîé ñòðîêè </link>, ýòîò ìàññèâ <emphasis>íå</emphasis> áóäåò ñîäåðæàòü çàïèñåé <varname>argv</varname> è <varname>argc</varname>; îíè íàõîäÿòñÿ â ìàññèâå <varname>$_SERVER</varname>. </simpara> </note> </listitem> </varlistentry> <varlistentry> <term><link linkend="reserved.variables.session">$_SESSION</link></term> <listitem> <simpara> Ïåðåìåííûå, çàðåãèñòðèðîâàííûå íà äàííûé ìîìåíò â ñåññèè ñêðèïòà. Àíàëîã ñòàðîãî ìàññèâà <varname>$HTTP_SESSION_VARS</varname> (êîòîðûé ïî-ïðåæíåìó äîñòóïåí, íî íå ðåêîìåíäóåòñÿ). Äîïîëíèòåëüíóþ èíôîðìàöèþ ñìîòðèòå â ðàçäåëå <link linkend="ref.session">Ôóíêöèè îáðàáîòêè ñåññèè</link>. </simpara> </listitem> </varlistentry> </variablelist> </sect1> <sect1 id="language.variables.scope"> <title>Îáëàñòü âèäèìîñòè ïåðåìåííîé</title> <simpara> Îáëàñòü âèäèìîñòè ïåðåìåííîé - ýòî ñðåäà, â êîòîðîé îíà îïðåäåëåíà.  áîëüøèíñòâå ñëó÷àåâ âñå ïåðåìåííûå PHP èìåþò åäèíóþ îáëàñòü âèäèìîñòè. Ýòà åäèíàÿ îáëàñòü âèäèìîñòè îõâàòûâàåò òàêæå âêëþ÷àåìûå (include) è òðåáóåìûå (require) ôàéëû. Íàïðèìåð: </simpara> <informalexample> <programlisting role="php"> <![CDATA[ <?php $a = 1; include "b.inc"; ?> ]]> </programlisting> </informalexample> <simpara> Çäåñü ïåðåìåííàÿ <varname>$a</varname> áóäåò äîñòóïíà âíóòðè âêëþ÷åííîãî ñêðèïòà <filename>b.inc</filename>. Îäíàêî, âíóòðè îïðåäåëåííûõ ïîëüçîâàòåëåì ôóíêöèé ââîäèòñÿ ëîêàëüíàÿ îáëàñòü âèäèìîñòè ôóíêöèè. Ëþáàÿ, èñïîëüçóåìàÿ âíóòðè ôóíêöèè ïåðåìåííàÿ, ïî óìîë÷àíèþ îãðàíè÷åíà ëîêàëüíîé îáëàñòüþ âèäèìîñòè ôóíêöèè. Íàïðèìåð: </simpara> <informalexample> <programlisting role="php"> <![CDATA[ <?php $a = 1; /* ãëîáàëüíàÿ îáëàñòü âèäèìîñòè */ function Test() { echo $a; /* ññûëêà íà ïåðåìåííóþ ëîêàëüíîé îáëàñòè âèäèìîñòè */ } Test(); ?> ]]> </programlisting> </informalexample> <simpara> Ýòîò ñêðèïò íå ñãåíåðèðóåò íèêàêîãî âûâîäà, ïîñêîëüêó âûðàæåíèå echo óêàçûâàåò íà ëîêàëüíóþ âåðñèþ ïåðåìåííîé <varname>$a</varname>, à â ïðåäåëàõ ýòîé îáëàñòè âèäèìîñòè åé íå íå áûëî ïðèñâîåíî çíà÷åíèå. Âîçìîæíî âû çàìåòèëè, ÷òî ýòî íåìíîãî îòëè÷àåòñÿ îò ÿçûêà C â òîì, ÷òî ãëîáàëüíûå ïåðåìåííûå â C àâòîìàòè÷åñêè äîñòóïíû ôóíêöèÿì, åñëè òîëüêî îíè íå áûëè ïåðåçàïèñàíû ëîêàëüíûì îïðåäåëåíèåì. Ýòî ìîæåò âûçâàòü íåêîòîðûå ïðîáëåìû, ïîñêîëüêó ëþäè ìîãóò íå÷àÿííî èçìåíèòü ãëîáàëüíóþ ïåðìåííóþ.  PHP, åñëè ãëîáàëüíàÿ ïåðåìåííàÿ áóäåò èñïîëüçîâàòüñÿ âíóòðè ôóíêöèè, îíà äîëæíà áûòü îáúÿâëåíà ãëîáàëüíîé âíóòðè íåå. </simpara> <sect2 id="language.variables.scope.global"> <title>Êëþ÷åâîå ñëîâî global</title> <simpara> Ñíà÷àëà ïðèìåð èñïîëüçîâàíèÿ <literal>global</literal>: </simpara> <para> <example> <title>Èñïîëüçîâàíèå global</title> <programlisting role="php"> <![CDATA[ <?php $a = 1; $b = 2; function Sum() { global $a, $b; $b = $a + $b; } Sum(); echo $b; ?> ]]> </programlisting> </example> </para> <simpara> Âûøåïðèâåäåííûé ñêðèïò âûâåäåò &quot;3&quot;. Ïîñëå îïðåäåëåíèÿ <varname>$a</varname> è <varname>$b</varname> âíóòðè ôóíêöèè êàê global âñå ññûëêè íà ëþáóþ èç ýòèõ ïåðåìåííûõ áóäóò óêàçûâàòü íà èõ ãëîáàëüíóþ âåðñèþ. Íå ñóùåñòâóåò íèêàêèõ îãðàíè÷åíèé íà êîëè÷åñòâî ãëîáàëüíûõ ïåðåìåííûõ, êîòîðûå ìîãóò îáðàáàòûâàòüñÿ ôóíêöèåé. </simpara> <simpara> Âòîðîé ñïîñîá äîñòóïà ê ïåðåìåííûì ãëîáàëüíîé îáëàñòè âèäèìîñòè - èñïîëüçîâàíèå ñïåöèàëüíîãî, îïðåäåëÿåìîãî PHP ìàññèâà <varname>$GLOBALS</varname>. Ïðåäûäóùèé ïðèìåð ìîæåò áûòü ïåðåïèñàí òàê: </simpara> <para> <example> <title>Èñïîëüçîâàíèå <varname>$GLOBALS</varname> âìåñòî global</title> <programlisting role="php"> <![CDATA[ <?php $a = 1; $b = 2; function Sum() { $GLOBALS["b"] = $GLOBALS["a"] + $GLOBALS["b"]; } Sum(); echo $b; ?> ]]> </programlisting> </example> </para> <simpara> <varname>$GLOBALS</varname> - ýòî àññîöèàòèâíûé ìàññèâ, êëþ÷îì êîòîðîãî ÿâëÿåòñÿ èìÿ, à çíà÷åíèåì - ñîäåðæèìîå ãëîáàëüíîé ïåðåìåííîé. Îáðàòèòå âíèìàíèå, ÷òî <varname>$GLOBALS</varname> ñóùåñòâóåò â ëþáîé îáëàñòè âèäèìîñòè, ýòî îáúÿñíÿåòñÿ òåì, ÷òî ýòîò ìàññèâ ÿâëÿåòñÿ <link linkend="language.variables.superglobals">ñóïåðãëîáàëüíûì</link>. Íèæå ïðèâåäåí ïðèìåð, äåìîíñòðèðóþùèé âîçìîæíîñòè ñóïåðãëîáàëüíûõ ïåðåìåííûõ: </simpara> <para> <example> <title>Ñóïåðãëîáàëüíûå ïåðåìåííûå è îáëàñòü âèäèìîñòè</title> <programlisting role="php"> <![CDATA[ <?php function test_global() { // Áîëüøèíñòâî ïðåäîïðåäåëåííûõ ïåðåìåííûõ íå ÿâëÿþòñÿ // "ñóïåð" è ÷òîáû áûòü äîñòóïíûìè â ëîêàëüíîé îáëàñòè // âèäèìîñòè ôóíêöèè òðåáóþò óêàçàíèÿ 'global'. global $HTTP_POST_VARS; echo $HTTP_POST_VARS['name']; // Ñóïåðãëîáàëüíûå ïåðåìåííûå äîñòóïíû â ëþáîé îáëàñòè // âèäèìîñòè è íå òðåáóþò óêàçàíèÿ 'global'. // Ñóïåðãëîáàëüíûå ïåðåìåííûå äîñòóïíû, íà÷èíàÿ ñ PHP 4.1.0 echo $_POST['name']; } ?> ]]> </programlisting> </example> </para> </sect2> <sect2 id="language.variables.scope.static"> <title>Èñïîëüçîâàíèå ñòàòè÷åñêèõ ïåðåìåííûõ</title> <simpara> Äðóãîé âàæíîé âîçìîæíîñòüþ îáëàñòè âèäèìîñòè ïåðåìåííîé ÿâëÿåòñÿ <emphasis>ñòàòè÷åñêàÿ</emphasis> ïåðåìåííàÿ. Ñòàòè÷åñêàÿ ïåðåìåííàÿ ñóùåñòâóåò òîëüêî â ëîêàëüíîé îáëàñòè âèäèìîñòè ôóíêöèè, íî íå òåðÿåò ñâîåãî çíà÷åíèÿ, êîãäà âûïîëíåíèå ïðîãðàììû âûõîäèò èç ýòîé îáëàñòè âèäèìîñòè. Ðàññìîòðèì ñëåäóþùèé ïðèìåð: </simpara> <para> <example> <title>Äåìîíñòðàöèÿ íåîáõîäèìîñòè ñòàòè÷åñêèõ ïåðåìåííûõ</title> <programlisting role="php"> <![CDATA[ <?php function Test () { $a = 0; echo $a; $a++; } ?> ]]> </programlisting> </example> </para> <simpara> Ýòà ôóíêöèÿ àáñîëþòíî áåñïîëåçíà ïîñêîëüêó ïðè êàæäîì âûçîâå îíà óñòàíàâëèâàåò <varname>$a</varname> â <literal>0</literal> è âûâîäèò &quot;0&quot;. Èíêðåìåíò ïåðåìåííîé <varname>$a</varname>++ çäåñü íå èãðàåò ðîëè, òàê êàê ïðè âûõîäå èç ôóíêöèè ïåðåìåííàÿ <varname>$a</varname> èñ÷åçàåò. ×òîáû íàïèñàòü ïîëåçíóþ ñ÷èòàþùóþ ôóíêöèþ, êîòîðàÿ íå áóäåò òåðÿòü òåêóùåãî çíà÷åíèÿ ñ÷åò÷èêà, ïåðåìåííàÿ <varname>$a</varname> îáúÿâëÿåòñÿ êàê static: </simpara> <para> <example> <title>Ïðèìåð èñïîëüçîâàíèÿ ñòàòè÷åñêèõ ïåðåìåííûõ</title> <programlisting role="php"> <![CDATA[ <?php function Test() { static $a = 0; echo $a; $a++; } ?> ]]> </programlisting> </example> </para> <simpara> Òåïåðü ïðè êàæäîì âûçîâå ôóíêöèÿ Test() áóäåò âûâîäèòü çíà÷åíèå <varname>$a</varname> è èíêðåìåíòèðîâàòü åãî. </simpara> <simpara> Ñòàòè÷åñêèå ïåðåìåííûå òàêæå äàþò âîçìîæíîñòü ðàáîòàòü ñ ðåêóðñèâíûìè ôóíêöèÿìè. Ðåêóðñèâíîé ÿâëÿåòñÿ ôóíêöèÿ, âûçûâàþùàÿ ñàìó ñåáÿ. Ïðè íàïèñàíèè ðåêóðñèâíîé ôóíêöèè íóæíî áûòü âíèìàòåëüíûì, ïîñêîëüêó åñòü âåðîÿòíîñòü ñäåëàòü ðåêóðñèþ áåñêîíå÷íîé. Âû äîëæíû óáåäèòüñÿ, ÷òî ñóùåñòâóåò àäåêâàòíûé ñïîñîá çàâåðøåíèÿ ðåêóðñèè. Ñëåäóþùàÿ ïðîñòàÿ ôóíêöèÿ ðåêóðñèâíî ñ÷èòàåò äî 10, èñïîëüçóÿ äëÿ îïðåäåëåíèÿ ìîìåíòà îñòàíîâêè ñòàòè÷åñêóþ ïåðåìåííóþ <varname>$count</varname>: </simpara> <para> <example> <title>Ñòàòè÷åñêèå ïåðåìåííûå è ðåêóðñèâíûå ôóíêöèè</title> <programlisting role="php"> <![CDATA[ <?php function Test() { static $count = 0; $count++; echo $count; if ($count < 10) { Test (); } $count--; } ?> ]]> </programlisting> </example> </para> <note> <para> Ñòàòè÷åñêèå ïåðåìåííûå ìîãóò áûòü îáúÿâëåíû òàê, êàê ïîêàçàíî â ïðåäûäóùåì ïðèìåðå. Ïîïûòêà ïðèñâîèòü ýòèì ïåðåìåííûì çíà÷åíèÿ, ÿâëÿþùèåñÿ ðåçóëüòàòîì âûðàæåíèé, âûçîâåò îøèáêó îáðàáîòêè. </para> <para> <example> <title>Îáúÿâëåíèå ñòàòè÷åñêèõ ïåðåìåííûõ</title> <programlisting role="php"> <![CDATA[ <?php function foo(){ static $int = 0; // âåðíî static $int = 1+2; // íåâåðíî (ïîñêîëüêó ýòî âûðàæåíèå) static $int = sqrt(121); // íåâåðíî (ïîñêîëüêó ýòî òîæå âûðàæåíèå) $int++; echo $int; } ?> ]]> </programlisting> </example> </para> </note> </sect2> <sect2 id="language.variables.scope.references"> <title>Ññûëêè ñ ãëîáàëüíûìè è ñòàòè÷åñêèìè ïåðåìåííûìè</title> <simpara> Äâèæîê Zend 1, ëåæàùèé â îñíîâå <literal>PHP 4</literal>, îïåðèðóåò ìîäèôèêàòîðàìè ïåðåìåííûõ <link linkend="language.variables.scope.static">static</link> è <link linkend="language.variables.scope.global">global</link> êàê <link linkend="language.references">ññûëêàìè</link>. Íàïðèìåð, ðåàëüíàÿ ãëîáàëüíàÿ ïåðåìåííàÿ âíåäðåííàÿ â îáëàñòü âèäèìîñòè ôóíêöèè óêàçàíèåì êëþ÷åâîãî ñëîâà <literal>global</literal> â äåéñòâèòåëüíîñòè ñîçäàåò ññûëêó íà ãëîáàëüíóþ ïåðåìåííóþ. Ýòî ìîæåò ïðèâåñòè ê íåîæèäàííîìó ïîâåäåíèþ, êàê ýòî ïîêàçàíî â ñëåäóþùåì ïðèìåðå: </simpara> <informalexample> <programlisting role="php"> <![CDATA[ <?php function test_global_ref() { global $obj; $obj = &new stdclass; } function test_global_noref() { global $obj; $obj = new stdclass; } test_global_ref(); var_dump($obj); test_global_noref(); var_dump($obj); ?> ]]> </programlisting> </informalexample> <simpara> Âûïîëíåíèå ýòîãî ïðèìåðà ñãåíåðèðóåò ñëåäóþùèé âûâîä: </simpara> <screen> NULL object(stdClass)(0) { } </screen> <simpara> Àíàëîãè÷íî âåäåò ñåáÿ è âûðàæåíèå <literal>static</literal>. Ññûëêè íå õðàíÿòñÿ ñòàòè÷íî: </simpara> <informalexample> <programlisting role="php"> <![CDATA[ <?php function &get_instance_ref() { static $obj; echo "Static object: "; var_dump($obj); if (!isset($obj)) { // Ïðèñâîèòü ññûëêó ñòàòè÷åñêîé ïåðåìåííîé $obj = &new stdclass; } $obj->property++; return $obj; } function &get_instance_noref() { static $obj; echo "Static object: "; var_dump($obj); if (!isset($obj)) { // Ïðèñâîèòü îáúåêò ñòàòè÷åñêîé ïåðåìåííîé $obj = new stdclass; } $obj->property++; return $obj; } $obj1 = get_instance_ref(); $still_obj1 = get_instance_ref(); echo "\n"; $obj2 = get_instance_noref(); $still_obj2 = get_instance_noref(); ?> ]]> </programlisting> </informalexample> <simpara> Âûïîëíåíèå ýòîãî ïðèìåðà ñãåíåðèðóåò ñëåäóþùèé âûâîä: </simpara> <screen> Static object: NULL Static object: NULL Static object: NULL Static object: object(stdClass)(1) { ["property"]=> int(1) } </screen> <simpara> Ýòîò ïðèìåð äåìîíñòðèðóåò, ÷òî ïðè ïðèñâîåíèè ññûëêè ñòàòè÷åñêîé ïåðåìåííîé îíà íå <emphasis>çàïîìèíàåòñÿ</emphasis>, êîãäà âû âûçûâàåòå ôóíêöèþ <literal>&amp;get_instance_ref()</literal> âî âòîðîé ðàç. </simpara> </sect2> </sect1> <sect1 id="language.variables.variable"> <title>Ïåðåìåííûå ïåðåìåííûå</title> <simpara> Èíîãäà áûâàåò óäîáíî èìåòü ïåðåìåííûìè èìåíà ïåðåìåííûõ. Òî åñòü, èìÿ ïåðåìåííîé, êîòîðîå ìîæåò áûòü îïðåäåëåíî è èçìåíåíî äèíàìè÷åñêè. Îáû÷íàÿ ïåðåìåííàÿ îïðåäåëÿåòñÿ ïðèìåðíî òàêèì âûðàæåíèåì: </simpara> <informalexample> <programlisting role="php"> <![CDATA[ <?php $a = "hello"; ?> ]]> </programlisting> </informalexample> <simpara> Ïåðåìåííàÿ ïåðåìåííàÿ áåðåò çíà÷åíèå ïåðåìåííîé è ðàññìàòðèâàåò åãî êàê èìÿ ïåðåìåííîé.  âûøåïðèâåäåííîì ïðèìåðå <emphasis>hello</emphasis> ìîæåò áûòü èñïîëüçîâàíî êàê èìÿ ïåðåìåííîé ïðè ïîìîùè äâóõ çíàêîâ äîëëàðà. Òî åñòü: </simpara> <informalexample> <programlisting role="php"> <![CDATA[ <?php $$a = "world"; ?> ]]> </programlisting> </informalexample> <simpara> Òåïåðü â äåðåâå ñèìâîëîâ PHP îïðåäåëåíû è ñîäåðæàòñÿ äâå ïåðåìåííûå: <varname>$a</varname>, ñîäåðæàùàÿ "hello", è <varname>$hello</varname>, ñîäåðæàùàÿ "world". Òàêèì îáðàçîì, âûðàæåíèå </simpara> <informalexample> <programlisting role="php"> <![CDATA[ <?php echo "$a ${$a}"; ?> ]]> </programlisting> </informalexample> <simpara> âûâåäåò òî æå, ÷òî è </simpara> <informalexample> <programlisting role="php"> <![CDATA[ <?php echo "$a $hello"; ?> ]]> </programlisting> </informalexample> <simpara> òî åñòü, îíè îáà âûâåäóò: <computeroutput>hello world</computeroutput>. </simpara> <simpara> Äëÿ òîãî ÷òîáû èñïîëüçîâàòü ïåðåìåííûå ïåðåìåííûå ñ ìàññèâàìè, âû äîëæíû ðåøèòü ïðîáëåìó äâóñìûñëåííîñòè. Òî åñòü, åñëè âû íàïèøåòå <varname>$$a[1]</varname>, îáðàáîò÷èêó íåîáõîäèìî çíàòü, õîòèòå ëè âû èñïîëüçîâàòü <varname>$a[1]</varname> â êà÷åñòâå ïåðåìåííîé, ëèáî âàì íóæíà êàê ïåðåìåííàÿ <varname>$$a</varname>, à çàòåì åå èíäåêñ [1]. Ñèíòàêñèñ äëÿ ðàçðåøåíèÿ ýòîé äâóñìûñëåííîñòè òàêîâ: <varname>${$a[1]}</varname> äëÿ ïåðâîãî ñëó÷àÿ è <varname>${$a}[1]</varname> äëÿ âòîðîãî. </simpara> <warning> <simpara> Ïîæàëóéñòà, îáðàòèòå âíèìàíèå, ÷òî ïåðåìåííûå ïåðåìåííûå íå ìîãóò èñïîëüçîâàòüñÿ ñ <link linkend="language.variables.superglobals">Ñóïåðãëîáàëüíûìè ìàññèâàìè</link> PHP. Ýòî îçíà÷àåò, ÷òî âû íå ìîæåòå äåëàòü ÷òî-òî âðîäå <varname>${$_GET}</varname>. Åñëè âû èùåòå ñïîñîá èñïîëüçîâàòü ñóïåðãëîáàëüíûå ïåðåìåííûå è ñòàðûå <varname>HTTP_*_VARS</varname>, âû ìîæåòå ïîïðîáîâàòü <link linkend="language.references">ññûëàòüñÿ</link> íà íèõ. </simpara> </warning> </sect1> <sect1 id="language.variables.external"> <title>Ïåðåìåííûå âíå PHP</title> <sect2 id="language.variables.external.form"> <title>HTML-ôîðìû (GET è POST)</title> <simpara> Êîãäà ïðîèñõîäèò îòïðàâêà äàííûõ ôîðìû PHP-ñêðèïòó, èíôîðìàöèÿ èç ýòîé ôîðìû àâòîìàòè÷åñêè ñòàíîâèòñÿ äîñòóïíîé åìó. Ñóùåñòâóåò ìíîãî ñïîñîáîâ ïîëó÷åíèÿ ýòîé èíôîðìàöèè, íàïðèìåð: </simpara> <para> <example> <title>Ïðîñòàÿ HTML-ôîðìà</title> <programlisting role="html"> <![CDATA[ <form action="foo.php" method="post"> Èìÿ: <input type="text" name="username" /><br /> Email: <input type="text" name="email" /><br /> <input type="submit" name="submit" value="Îòïðàâü ìåíÿ!" /> </form> ]]> </programlisting> </example> </para> <para>  çàâèñèìîñòè îò âàøåé èíäèâèäóàëüíîé óñòàíîâêè è ëè÷íûõ íàñòðîåê ñóùåñòâóåò ìíîãî ñïîñîáîâ äîñòóïà ê äàííûì èç âàøèõ HTML-ôîðì. Âîò íåñêîëüêî ïðèìåðîâ: </para> <para> <example> <title>Äîñòóï ê äàííûì èç ïðîñòîé HTML POST-ôîðìû</title> <programlisting role="html"> <![CDATA[ <?php // Äîñòóïíî, íà÷èíàÿ ñ PHP 4.1.0 echo $_POST['username']; echo $_REQUEST['username']; import_request_variables('p', 'p_'); echo $p_username; // Äîñòóïíî, íà÷èíàÿ ñ PHP 3. Íà÷èíàÿ ñ PHP 5.0.0, ýòè äëèííûå ïðåäîïðåäåëåííûå // ïåðåìåííûå ìîãóò áûòü îòêëþ÷åíû äèðåêòèâîé register_long_arrays. echo $HTTP_POST_VARS['username']; // Äîñòóïíî, åñëè äèðåêòèâà PHP register_globals = on. Íà÷èíàÿ // ñ PHP 4.2.0, çíà÷åíèå ïî óìîë÷àíèþ register_globals = off. // Èñïîëüçîâàíèå/äîâåðèå ýòîìó ìåòîäó íåïðåäïî÷òèòåëüíî. echo $username; ?> ]]> </programlisting> </example> </para> <para> GET-ôîðìà èñïîëüçóåòñÿ àíàëîãè÷íî, çà èñêëþ÷åíèåì òîãî, ÷òî âìåñòî POST âàì íóæíî áóäåò èñïîëüçîâàòü ñîîòâåòñòâóþùóþ ïðåäîïðåäåëåííóþ ïåðåìåííóþ GET. GET îòíîñèòñÿ òàêæå ê QUERY_STRING (èíôîðìàöèÿ â URL ïîñëå '?'). Òàê, íàïðèìåð, <literal>http://www.example.com/test.php?id=3</literal> ñîäåðæèò GET-äàííûå, äîñòóïíûå êàê <varname>$_GET['id']</varname>. Ñìîòðèòå òàêæå <link linkend="reserved.variables.request">$_REQUEST</link> è <function>import_request_variables</function>. </para> <note> <para> <link linkend="language.variables.superglobals">Ñóïåðãëîáàëüíûå ìàññèâû</link>, òàêèå êàê <varname>$_POST</varname> è <varname>$_GET</varname>, ñòàëè äîñòóïíû â PHP 4.1.0 </para> </note> <para> Êàê óæå ãîâîðèëîñü, äî PHP 4.2.0 çíà÷åíèåì <link linkend="ini.register-globals">register_globals</link> ïî óìîë÷àíèþ áûëî <emphasis>on</emphasis> (âêëþ÷åíî). À â PHP 3 îíî âñåãäà áûëî âêëþ÷åíî. Ñîîáùåñòâî PHP ðåêîìåíäóåò âñåì íå îñíîâûâàòüñÿ íà ýòîé äèðåêòèâå, ïîñêîëüêó ïðåäïî÷òèòåëüíî ïðèñâîèòü åé çíà÷åíèå <emphasis>off</emphasis> è ïèñàòü ïðîãðàììû èñõîäÿ èç ýòîãî. </para> <note> <para> Êîíôèãóðàöèîííàÿ äèðåêòèâà <link linkend="ini.magic-quotes-gpc">magic_quotes_gpc</link> âëèÿåò íà çíà÷åíèÿ Get, Post è Cookie. Åñëè îíà âêëþ÷åíà, çíà÷åíèå (It's "PHP!") àâòîìàòè÷åñêè ñòàíåò (It\'s \"PHP!\"). Ìíåìîíèçàöèÿ íåîáõîäèìà ïðè äîáàâëåíèè â áàçó äàííûõ. Ñìîòðèòå òàêæå <function>addslashes</function>, <function>stripslashes</function> è <link linkend="ini.magic-quotes-sybase">magic_quotes_sybase</link>. </para> </note> <simpara> PHP òàêæå ïîíèìàåò ìàññèâû â êîíòåêñòå ïåðåìåííûõ ôîðìû (ñìîòðèòå <link linkend="faq.html">ñîîòâåòñòâóþùèå ×ÀÂÎ</link>). Ê ïðèìåðó, âû ìîæåòå ñãðóïïèðîâàòü ñâÿçàííûå ïåðåìåííûå âìåñòå èëè èñïîëüçîâàòü ýòó âîçìîæíîñòü äëÿ ïîëó÷åíèÿ çíà÷åíèé ñïèñêà ìíîæåñòâåííîãî âûáîðà select. Íàïðèìåð, äàâàéòå îòïðàâèì ôîðìó ñàìîé ñåáå, à ïîñëå îòïðàâêè îòîáðàçèì äàííûå: </simpara> <para> <example> <title>Áîëåå ñëîæíûå ïåðåìåííûå ôîðìû</title> <programlisting role="php"> <![CDATA[ <?php if (isset($_POST['action']) && $_POST['action'] == 'submitted') { echo '<pre>'; print_r($_POST); echo '<a href="'. $_SERVER['PHP_SELF'] .'">Ïîïðîáóéòå åùå ðàç</a>'; echo '</pre>'; } else { ?> <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> Èìÿ: <input type="text" name="personal[name]" /><br /> Email: <input type="text" name="personal[email]" /><br /> Ïèâî: <br /> <select multiple name="beer[]"> <option value="warthog">Warthog</option> <option value="guinness">Guinness</option> <option value="stuttgarter">Stuttgarter Schwabenbräu</option> </select><br /> <input type="hidden" name="action" value="submitted" /> <input type="submit" name="submit" value="Îòïðàâü ìåíÿ!" /> </form> <?php } ?> ]]> </programlisting> </example> </para> <para>  PHP 3 èñïîëüçîâàíèå ìàññèâîâ â ïåðåìåííûõ ôîðìû îãðàíè÷åíî îäíîìåðíûìè ìàññèâàìè.  PHP 4 òàêèõ îãðàíè÷åíèé íåò. </para> <sect3 id="language.variables.external.form.submit"> <title>Èìåíà ïåðåìåííûõ êíîïêè-èçîáðàæåíèÿ</title> <simpara> Ïðè îòïðàâêå ôîðìû âìåñòî ñòàíäàðòíîé êíîïêè ìîæíî èñïîëüçîâàòü èçîáðàæåíèå ñ ïîìîùüþ òåãà òàêîãî âèäà: </simpara> <informalexample> <programlisting role="html"> <![CDATA[ <input type="image" src="image.gif" name="sub" /> ]]> </programlisting> </informalexample> <simpara> Êîãäà ïîëüçîâàòåëü ùåëêíåò ãäå-íèáóäü íà èçîáðàæåíèè, ñîîòâåòñòâóþùàÿ ôîðìà áóäåò ïåðåäàíà íà ñåðâåð ñ äâóìÿ äîïîëíèòåëüíûìè ïåðåìåííûìè - sub_x è sub_y. Îíè ñîäåðæàò êîîðäèíàòû íàæàòèÿ ïîëüçîâàòåëÿ íà èçîáðàæåíèå. Îïûòíûå ïðîãðàììèñòû ìîãóò çàìåòèòü, ÷òî íà ñàìîì äåëå èìåíà ïåðåìåííûõ, îòïðàâëåííûõ áðîóçåðîì ñîäåðæàò òî÷êó, à íå ïîä÷åðêèâàíèå, íî PHP àâòîìàòè÷åñêè êîíâåðòèðóåò òî÷êó â ïîä÷åðêèâàíèå. </simpara> </sect3> </sect2> <sect2 id="language.variables.external.cookies"> <title>HTTP Cookies</title> <simpara> PHP ÿâíî ïîääåðæèâàåò HTTP cookies êàê îïðåäåëåíî â <ulink url="&spec.cookies;">ñïåöèôèêàöèè Netscape</ulink>. Cookies - ýòî ìåõàíèçì äëÿ õðàíåíèÿ äàííûõ â óäàëåííîì áðîóçåðå è îòñëåæèâàíèÿ è èäåíòèôèêàöèè òàêèì îáðàçîì âåðíóâøèõñÿ ïîëüçîâàòåëåé. Âû ìîæåòå óñòàíîâèòü cookies, èñïîëüçóÿ ôóíêöèþ <function>setcookie</function>. Cookies ÿâëÿþòñÿ ÷àñòüþ HTTP-çàãîëîâêà, ïîýòîìó ôóíêöèÿ SetCookie äîëæíà âûçûâàòüñÿ äî òîãî, êàê áðîóçåðó áóäåò îòïðàâëåí êàêîé áû òî íè áûëî âûâîä. Ýòî îãðàíè÷åíèå àíàëîãè÷íî îãðàíè÷åíèþ ôóíêöèè <function>header</function>. Äàííûå, õðàíÿùèåñÿ â cookie, äîñòóïíû â ñîîòâåòñòâóþùèõ ìàññèâàõ äàííûõ cookie, òàêèõ êàê <varname>$_COOKIE</varname>, <varname>$HTTP_COOKIE_VARS</varname>, à òàêæå â <varname>$_REQUEST</varname>. Ïîäðîáíîñòè è ïðèìåðû ñìîòðèòå íà ñòðàíèöå <function>setcookie</function> äîêóìåíòàöèè. </simpara> <simpara> Åñëè âû õîòèòå ïðèñâîèòü ìíîæåñòâî çíà÷åíèé îäíîé ïåðåìåííîé cookie, âû ìîæåòå ïðèñâîèòü èõ êàê ìàññèâ. Íàïðèìåð: </simpara> <informalexample> <programlisting role="php"> <![CDATA[ <?php setcookie("MyCookie[foo]", "Òåñò 1", time()+3600); setcookie("MyCookie[bar]", "Òåñò 2", time()+3600); ?> ]]> </programlisting> </informalexample> <simpara> Ýòî ñîçäàñò äâå ðàçíûå cookie, õîòÿ â âàøåì ñêðèïòå MyCookie áóäåò òåïåðü îäíèì ìàññèâîì. Åñëè âû õîòèòå óñòàíîâèòü èìåííî îäíó cookie ñî ìíîæåñòâîì çíà÷åíèé, ïðèìèòå âî âíèìàíèå ñíà÷àëà ïðèìåíåíèå ê çíà÷åíèÿì òàêèõ ôóíêöèé, êàê <function>serialize</function> èëè <function>explode</function>. </simpara> <simpara> Îáðàòèòå âíèìàíèå, ÷òî cookie çàìåíèò ïðåäûäóùóþ cookie ñ òåì æå èìåíåì â âàøåì áðîóçåðå, åñëè òîëüêî ïóòü èëè äîìåí íå îòëè÷àþòñÿ. Òàê, äëÿ ïðèëîæåíèÿ êîðçèíû ïîêóïîê âû, âîçìîæíî, çàõîòèòå ñîõðàíèòü ñ÷åò÷èê. Òî åñòü: </simpara> <example> <title>A <function>setcookie</function> example</title> <programlisting role="php"> <![CDATA[ <?php if (isset($_COOKIE['count'])) { $count = $_COOKIE['count'] + 1; } else { $count = 1; } setcookie("count", $count, time()+3600); setcookie("Cart[$count]", $item, time()+3600); ?> ]]> </programlisting> </example> </sect2> <sect2 id="language.variables.external.dot-in-names"> <title>Òî÷êè â èìåíàõ ïðèõîäÿùèõ ïåðåìåííûõ</title> <para> Êàê ïðàâèëî, PHP íå ìåíÿò ïåðåäàâàåìûõ ñêðèïòó èìåí ïåðåìåííûõ. Îäíàêî ñëåäóåò îòìåòèòü, ÷òî òî÷êà íå ÿâëÿåòñÿ êîððåêòíûì ñèìâîëîì â èìåíè ïåðåìåííîé PHP. Ïîýòîìó ðàññìîòðèì òàêóþ çàïèñü: <programlisting role="php"> <![CDATA[ <?php $varname.ext; /* íåâåðíîå èìÿ ïåðåìåííîé */ ?> ]]> </programlisting>  äàííîì ñëó÷àå èíòåðïðåòàòîð âèäèò ïåðåìåííóþ <varname>$varname</varname>, ïîñëå êîòîðîé èäåò îïåðàòîð êîíêàòåíàöèè, à çàòåì ãîëàÿ ñòðîêà (òî åñòü, íå çàêëþ÷åííàÿ â êàâû÷êè ñòðîêà, íå ñîîòâåòñòâóþùàÿ íè îäíîìó èç êëþ÷åâûõ èëè çàðåçåðâèðîâàííûõ ñëîâ) 'ext'. Î÷åâèäíî, ÷òî ýòî íå äàñò îæèäàåìîãî ðåçóëüòàòà. </para> <para> Ïî ýòîé ïðè÷èíå âàæíî çàìåòèòü, ÷òî PHP áóäåò àâòîìàòè÷åñêè çàìåíÿòü ëþáûå òî÷êè â èìåíàõ ïðèõîäÿùèõ ïåðåìåííûõ íà ñèìâîëû ïîä÷åðêèâàíèÿ. </para> </sect2> <sect2 id="language.variables.determining-type-of"> <title>Îïðåäåëåíèå òèïîâ ïåðåìåííûõ</title> <para> Ïîñêîëüêó PHP îïðåäåëÿåò è êîíâåðòèðóåò òèïû ïåðåìåííûõ (â áîëüøèíñòâå ñëó÷àåâ) êàê íàäî, íå âñåãäà î÷åâèäíî, êàêîé òèï èìååò äàííàÿ ïåðåìåííàÿ â êîíêðåòíûé ìîìåíò âðåìåíè. PHP ñîäåðæèò íåñêîëüêî ôóíêöèé, ïîçâîëÿþùèõ îïðåäåëèòü òèï ïåðåìåííîé, òàêèõ êàê: <function>gettype</function>, <function>is_array</function>, <function>is_float</function>, <function>is_int</function>, <function>is_object</function> è <function>is_string</function>. Ñìîòðèòå òàêæå ðàçäåë <link linkend="language.types">Òèïû</link>. </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 -->
« previous php.doc.ru (#179) next »