cvs: phpdoc /ru/appendices migration.xml

From: Date: Fri, 23 Nov 2001 18:14:00 +0000
Subject: cvs: phpdoc /ru/appendices migration.xml
Groups: php.doc 
Request: Send a blank email to phpdoc+get-969339190@lists.php.net to get a copy of this message
tronic Fri Nov 23 13:14:00 2001 EDT Added files: /phpdoc/ru/appendices migration.xml Log: Translation done.

Index: phpdoc/ru/appendices/migration.xml +++ phpdoc/ru/appendices/migration.xml <?xml version="1.0" encoding="windows-1251"?> <!-- $Revision: 1.1 $ --> <appendix id="migration"> <title>Ïåðåõîä îò PHP/FI 2.0 ê PHP 3.0</title> <section id="migration.about"> <title>Î íåñîâìåñòèìîñòè â âåðñèè 3.0</title> <simpara> PHP 3.0 áûë ïåðåïèñàí ïðàêòè÷åñêè 'ñ íóëÿ. Îí îáëàäàåò íàäëåæàùèì ñèíòàêñè÷åñêèì àíàëèçàòîðîì, êîòîðûé îáëàäàåò áîëåå âûñîêèì áûñòðîäåéñòâèåì è ïîñëåäîâàòåëüíîñòüþ, ÷åì èñïîëüçîâàâøèéñÿ â âåðñèÿõ 2.0. Âåðñèÿ 3.0 èñïîëüçóåò ìåíüøå ïàìÿòè. Îäíàêî, äîñòèæåíèå íåêîòîðûõ èç óëó÷øåíèé áûëî íåâîçìîæíî áåç èçìåíåíèÿ óñëîâèé ñîâìåñòèìîñòè, êàê â ñèíòàêñèñå, òàê è â ôóíêöèîíàëüíîñòè. </simpara> <simpara> Êî âñåìó ïðî÷åìó, ðàçðàáîò÷èêè PHP ïîñòàðàëèñü ñäåëàòü êàê ñèíòàêñèñ, òàê è ñåìàíòèêó ìàêñèìàëüíî ÷åòêèìè â âåðñèè 3.0, è ýòî òàêæå ñòàëî ïðè÷èíîé óõóäøåíèÿ ñîâìåñòèìîñòè.  êîíöå êîíöîâ, ðàçðàáîò÷èêè ïîëàãàþò, ÷òî ýòè èçìåíåíèÿ ïðèâåäóò òîëüêî ê ëó÷øåìó. </simpara> <simpara> Ýòà ãëàâà ïðåäíàçíà÷åíà äëÿ òîãî, ÷òîáû äàòü âàì ïðåäñòàâëåíèå î íåñîâìåñòèìîñòÿõ âî âðåìÿ ñìåíû PHP/FI 2.0 íà PHP 3.0 è ïîìî÷ü âàì ðàçðåøèòü èõ. Íîâûå îòëè÷èòåëüíûå îñîáåííîñòè çäåñü íå óïîìÿíóòû, çà èñêëþ÷åíèåì ñëó÷àåâ íåîáõîäèìîñòè. </simpara> <simpara> Ñóùåñòâóåò ïðîãðàììà ïðåîáðàçîâàíèÿ, êîòîðàÿ ìîæåò àâòîìàòè÷åñêè ïðèâåñòè âàøè ñêðèïòû PHP/FI 2.0 ê âåðñèè 3.0. Åå ìîæíî íàéòè â êàòàëîãå <filename class="directory">convertor</filename> äèñòðèáóòèâà PHP 3.0. Òåì íå ìåíåå, âû äîëæíû âíèìàòåëüíî ïðî÷èòàòü ýòó ãëàâó, òàê êàê ýòà ïðîãðàììà óñòðàíÿåò òîëüêî ñèíòàêñè÷åñêóþ íåñîâìåñòèìîñòü. </simpara> </section> <section id="migration.startendtags"> <title>Íà÷àëüíûé/êîíå÷íûé òåãè</title> <para> Ïåðâîå, ÷òî âû, âåðîÿòíî, çàìåòèëè - ýòî èçìåíåíèå òåãîâ PHP. Ïðåæíÿÿ ôîðìà <literal>&lt;? &gt;</literal> áûëà çàìåíåíà íà íîâûå òðè âîçìîæíûå: <example> <title>Ïåðåõîä: ïðåæíèå íà÷àëüíûé/êîíå÷íûé òåãè</title> <programlisting role="php"> &lt;? echo "Ýòî êîä PHP/FI 2.0.\n"; &gt; </programlisting> </example>  âåðñèè 2.0 PHP/FI òàêæå ïîääåðæèâàåò òàêîé âàðèàíò: <example> <title>Ïåðåõîä: ïåðâûå íîâûå íà÷àëüíûé/êîíå÷íûé òåãè</title> <programlisting role="php"> &lt;? echo "Ýòî êîä PHP 3.0!\n"; ?&gt; </programlisting> </example> Çàìåòüòå, ÷òî êîíå÷íûé òåã òåïåðü ñîñòîèò èç âîïðîñèòåëüíîãî çíàêà è ñèìâîëà 'áîëüøå' âìåñòî îäíîãî ñèìâîëà 'áîëüøå'. Îäíàêî, åñëè âû ïëàíèðóåòå èñïîëüçîâàòü XML íà âàøåì ñåðâåðå, âû ìîæåòå ñòîëêíóòüñÿ ñ ïðîáëåìàìè, ïîñêîëüêó PHP áóäåò ïûòàòüñÿ âûïîëíèòü ðàçìåòêó XML êàê êîä PHP. Âñëåäñòâèå ýòîãî, áûë ïðåäëîæåí ñëåäóþùèé âàðèàíò: <example> <title>Ïåðåõîä: âòîðûå íîâûå íà÷àëüíûé/êîíå÷íûé òåãè</title> <programlisting role="php"> &lt;?php echo "Ýòî êîä PHP 3.0!\n"; ?&gt; </programlisting> </example> Íåêîòîðûå ïîëüçîâàòåëè ñòîëêíóëèñü ñ ïðîáëåìîé íåêîððåêòíîãî âîñïðèÿòèÿ òåãîâ íåêîòîðûìè ðåäàêòîðàìè. Îäíèì èç òàêèõ ðåäàêòîðîâ ÿâëÿåòñÿ Microsoft FrontPage, è, äëÿ ðåøåíèÿ ýòîé ïðîáëåìû, áûë ââåäåí ñëåäóþùèé âàðèàíò: <example> <title>Ïåðåõîä: òðåòüè íîâûå íà÷àëüíûé/êîíå÷íûé òåãè</title> <programlisting role="php"> &lt;script language="php"&gt; echo "Ýòî êîä PHP 3.0!\n"; &lt;/script&gt; </programlisting> </example> </para> </section> <section id="migration.if-endif"> <title>Ñèíòàêñèñ if..endif</title> <para> 'Àëüòåðíàòèâíûé' ñïîñîá íàïèñàíèÿ îïåðàòîðîâ if/elseif/else ñ èñïîëüçîâàíèåì if(); elseif(); else; endif; íå ìîæåò ýôôåêòèâíî âûïîëíÿòüñÿ áåç ñèëüíîãî óñëîæíåíèÿ ñèíòàêñè÷åñêîãî àíàëèçàòîðà âåðñèè 3.0. Âñëåäñòâèå ýòîãî, ñèíòàêñèñ áûë èçìåíåí: <example> <title>Ïåðåõîä: ïðåæíèé ñèíòàêñèñ if..endif</title> <programlisting role="php"> if ($foo); echo "äà\n"; elseif ($bar); echo "ïî÷òè\n"; else; echo "íåò\n"; endif; </programlisting> </example> <example> <title>Ïåðåõîä: íîâûé ñèíòàêñèñ if..endif</title> <programlisting role="php"> if ($foo): echo "äà\n"; elseif ($bar): echo "ïî÷òè\n"; else: echo "íåò\n"; endif; </programlisting> </example> Çàìåòüòå, ÷òî âî âñåõ îïåðàòîðàõ, êðîìå çàâåðøàþùåãî âûðàæåíèå (endif), âìåñòî òî÷åê ñ çàïÿòûìè èñïîëüçóþòñÿ çàïÿòûå. </para> </section> <section id="migration-while"> <title>Ñèíòàêñèñ while</title> <para> Êàê è â ñëó÷àå ñ if..endif, ñèíòàêñèñ while..endwhile èçìåíèëñÿ: <example> <title>Ïåðåõîä: ïðåæíèé ñèíòàêñèñ while..endwhile</title> <programlisting role="php"> while ($more_to_come); ... endwhile; </programlisting> </example> <example> <title>Ïåðåõîä: íîâûé ñèíòàêñèñ while..endwhile</title> <programlisting role="php"> while ($more_to_come): ... endwhile; </programlisting> </example> </para> <warning> <simpara> Èñïîëüçîâàíèå ïðåæíåãî ñèíòàêñèñà while..endwhile â PHP 3.0 ïðèâåäåò ê ïîëó÷åíèþ áåñêîíå÷íîãî öèêëà. </simpara> </warning> </section> <section id="migration.expr"> <title>Òèïû âûðàæåíèé</title> <simpara> Äëÿ îïðåäåëåíèÿ òèïà ðåçóëüòàòà âûðàæåíèé â PHP/FI 2.0 èñïîëüçîâàëàñü èõ ëåâàÿ ÷àñòü.  PHP 3.0 ïðè îïðåäåëåíèè òèïà ðåçóëüòàòà èñïîëüçóþòñÿ îáå ÷àñòè, è âûïîëíåíèå ñêðèïòîâ PHP/FI 2.0 â ñðåäå PHP 3.0 ìîæåò ïðèâåñòè ê íåïðåäñêàçóåìûì ðåçóëüòàòàì. </simpara> <para> Ðàññìîòðèòå ýòîò ïðèìåð: <informalexample> <programlisting role="php"> $a[0]=5; $a[1]=7; $key = key($a); while ("" != $key) { echo "$keyn"; next($a); } </programlisting> </informalexample>  PHP/FI 2.0 ýòîò ñêðèïò âûâîäèò îáà èíäåêñà $a.  PHP 3.0 ýòîò ñêðèïò íå âûâîäèò íè÷åãî. Ïðè÷èíîé ýòîãî ÿâëÿåòñÿ òî, ÷òî â PHP/FI 2.0 ëåâûé àðãóìåíò èìååò ñòðîêîâûé òèï, ïîýòîìó ïðîèçâîäèëîñü ñòðîêîâîå ñðàâíåíèå; â ñàìîì äåëå, <literal>""</literal> íå ðàâíî <literal>"0"</literal>, è öèêë óñïåøíî ïðîäîëæàë âûïîëíåíèå.  PHP 3.0 ïðè ñðàâíåíèè ñòðîêè ñ öåëî÷èñëåííûì çíà÷åíèåì, âûïîëíÿåòñÿ öåëî÷èñëåííîå ñðàâíåíèå (ñòðîêà ïåðåâîäèòñÿ â ÷èñëî). Ýòî ïðèâîäèò ê ñðàâíåíèþ <literal>atoi("")</literal>, ÷òî ðàâíî <literal>0</literal> è <literal>variablelist</literal>, ÷òî òàêæå ðàâíî <literal>0</literal>, à ïîñêîëüêó <literal>0==0</literal>, òåëî öèêëà íå âûïîëíÿåòñÿ íè ðàçó. </para> <para> Èñïðàâèòü ýòî ïðîñòî. Çàìåíèòå îïåðàòîð while íà: <informalexample> <programlisting role="php"> while ((string)$key != "") { </programlisting> </informalexample> </para> </section> <section id="migration.errors"> <title>Èçìåíèëèñü ñîîáùåíèÿ îá îøèáêàõ</title> <simpara> Ñîîáùåíèÿ îá îøèáêàõ PHP 3.0 îáû÷íî áîëåå òî÷íû, ÷åì â 2.0, íî âû áîëüøå íå ñìîæåòå ïîëó÷èòü äëÿ ïðîñìîòðà ôðàãìåíò êîäà, ñòàâøèé ïðè÷èíîé âîçíèêíîâåíèÿ îøèáêè. Âìåñòî ýòîãî âû óâèäèòå èìÿ ôàéëà è íîìåð ñòðîêè, â êîòîðîé ïðîèçîøëà îøèáêà. </simpara> </section> <section id="migration.booleval"> <title>Íåïîëíîå âû÷èñëåíèå ëîãè÷åñêèõ âûðàæåíèé</title> <simpara>  PHP 3.0 ëîãè÷åñêèå âûðàæåíèÿ âû÷èñëÿþòñÿ íåïîëíî. Ýòî îçíà÷àåò, ÷òî â âûðàæåíèè, ïîäîáíîì <literal>(1 || test_me())</literal> ôóíêöèÿ <function>test_me</function> íå áóäåò âûïîëíåíà, ïîñêîëüêó íè÷òî íå ìîæåò èçìåíèòü ðåçóëüòàò âûðàæåíèÿ ïîñëå <literal>1</literal>. </simpara> <simpara> Ýòî âòîðîñòåïåííûé ôàêòîð íåñîâìåñòèìîñòè, íî, òåì íå ìåíåå, îí ìîæåò ïðèâîäèòü ê íåîæèäàííûì ïîáî÷íûì ýôôåêòàì. </simpara> </section> <section id="migration.truefalse"> <title>Çíà÷åíèÿ &true;/&false;, âîçâðàùàåìûå ôóíêöèÿìè</title> <simpara> Áîëüøèíñòâî âíóòðåííèõ ôóíêöèé áûëè ïåðåïèñàíû òàê, ÷òîáû â ðåçóëüòàòå èõ óñïåøíîãî âûïîëíåíèÿ âîçâðàùàëîñü çíà÷åíèå &true; è &false; â ñëó÷àå íåóäà÷íîãî âûïîëíåíèÿ, ÷òî ñîîòâåñòâóåò çíà÷åíèÿì 0 è -1 â PHP/FI 2.0. Íîâîå ïîâåäåíèå ôóíêöèé ïîçâîëÿåò ñîçäàâàòü áîëåå ëîãè÷íûé êîä, íàïðèìåð <literal>$fp = fopen("/your/file") èëè fail("darn!");</literal>. Ïî ïðè÷èíå îòñóòñòâèÿ â PHP/FI 2.0 ÷åòêèõ ïðàâèë, îïðåäåëÿþùèõ âîçâðàùàåìûå ôóíêöèÿìè çíà÷åíèÿ â ñëó÷àå èõ íåóäà÷íîãî çàâåðøåíèÿ, ñêðèïòû, ïîäâåðãøèåñÿ ïðåîáðàçîâàíèþ, äîëæíû áûòü ïðîâåðåíû âðó÷íóþ. </simpara> <para> <example> <title>Ïåðåõîä îò 2.0: âîçâðàùàåìûå çíà÷åíèÿ, ïðåæíèé êîä</title> <programlisting role="php"> $fp = fopen($file, "r"); if ($fp == -1); echo("Íåëüçÿ îòêðûòü ôàéë $file äëÿ ÷òåíèÿ&lt;br&gt;\n"); endif; </programlisting> </example> <example> <title>Ïåðåõîä îò from 2.0: âîçâðàùàåìûå çíà÷åíèÿ, ïðåæíèé êîä</title> <programlisting role="php"> $fp = @fopen($file, "r") or print("Íåëüçÿ îòêðûòü ôàéë $file äëÿ ÷òåíèÿ&lt;br&gt;\n"); </programlisting> </example> </para> </section> <section id="migration-other"> <title>Äðóãèå íåñîâìåñòèìîñòè</title> <itemizedlist> <listitem><simpara> Ìîäóëü PHP 3.0 áîëüøå íå ïîääåðæèâàåò Apache âåðñèé áîëåå ðàííèõ, ÷åì 1.2. Òåïåðü òðåáóåòñÿ Apache âåðñèè 1.2 èëè áîëåå ïîçäíåé. </simpara></listitem> <listitem><simpara> <function>echo</function> áîëüøå íå ïîääåðæèâàåò ôîðìàòèðîâàíèå ñòðîê. Âìåñòî íåå èñïîëüçóéòå ôóíêöèþ <function>printf</function>. </simpara></listitem> <listitem><simpara>  PHP/FI 2.0, îøèáêà â ïðîãðàììèðîâàíèè ñòàëà ïðè÷èíîé òîãî, ÷òî ïåðåìåííàÿ <literal>$foo[0]</literal> èìåëà òàêîå æå çíà÷åíèå, êàê è <literal>$foo</literal>.  PHP 3.0 ýòà îøèáêà îòñóòñòâóåò. </simpara></listitem> <listitem> <simpara> ×òåíèå ìàññèâîâ ñ èñïîëüçîâàíèåì <literal>$array[]</literal> áîëüøå íå ïîääåðæèâàåòñÿ </simpara> <simpara> Òàêèì îáðàçîì, âû íå ìîæåòå ïðîéòè ïî ìàññèâó öèêëîì, âûïîëíÿþùèì äåéñòâèå <literal>$data = $array[]</literal>. Âìåñòî ýòîãî èñïîëüçóéòå <function>current</function> è <function>next</function>. </simpara> <simpara> Òàêæå, <literal>$array1[] = $array2</literal> íå äîáàâëÿåò çíà÷åíèé <literal>$array2</literal> ê <literal>$array1</literal>, íî äîáàâëÿåò <literal>$array2</literal> â êîíåö <literal>$array1</literal>. Îçíàêîìüòåñü òàêæå ñ ìíîãîìåðíûìè ìàññèâàìè. </simpara> </listitem> <listitem> <simpara> Îïåðàòîð êîíêàòåíàöèè <literal>"+"</literal> áîëüøå íå ÿâëÿåòñÿ ïåðåãðóæåííûì ïî îòíîøåíèþ ê ñòðîêàì, âìåñòî ýòîãî îí ïðåîáðàçóåò ñâîè àðãóìåíòû â ÷èñëà è âûïîëíÿåò îïåðàöèþ ñëîæåíèÿ. Âìåñòî ýòîãî èñïîëüçóéòå îïåðàòîð <literal>"."</literal>. </simpara> </listitem> </itemizedlist> <example> <title>Ïåðåõîä îò 2.0: êîíêàòåíàöèÿ ñòðîê</title> <programlisting role="php"> echo "1" + "1"; </programlisting> <para>  PHP 2.0 ðåçóëüòàòîì ýòîãî áóäåò 11, â PHP 3.0 ðåçóëüòàòîì áóäåò 2. Âìåñòî ýòîãî èñïîëüçóéòå: <programlisting role="php"> echo "1"."1"; </programlisting> <programlisting role="php"> $a = 1; $b = 1; echo $a + $b; </programlisting> </para> <para> Ðåçóëüòàòîì ýòîãî è â PHP 2.0 è 3.0 áóäåò 2. <programlisting role="php"> $a = 1; $b = 1; echo $a.$b; </programlisting>  PHP 3.0 ðåçóëüòàòîì ýòîãî áóäåò 11. </para> </example> </section> </appendix> <!-- Keep this comment at the end of the file Local variables: mode: sgml sgml-omittag:t sgml-shorttag:t sgml-minimize-attributes:nil sgml-always-quote-attributes:t sgml-indent-step:1 sgml-indent-data:t sgml-parent-document:nil sgml-default-dtd-file:"../../manual.ced" sgml-exposed-tags:nil sgml-local-catalogs:nil sgml-local-ecat-files:nil End: vim600: syn=xml fen fdm=syntax fdl=2 si vim: et tw=78 syn=sgml vi: ts=1 sw=1 -->
« previous php.doc (#969339190) next »