cvs: phpdoc /ru/appendices migration.xml
| From: | Ivan Kovalenko | Date: | Mon, 04 Feb 2002 01:22:10 +0000 |
| Subject: | cvs: phpdoc /ru/appendices migration.xml | ||
| Groups: | php.doc | ||
| Request: | Send a blank email to phpdoc+get-969341875@lists.php.net to get a copy of this message | ||
tronic Sun Feb 3 20:22:10 2002 EDT
Modified files:
/phpdoc/ru/appendices migration.xml
Log:
Translation done.
Index: phpdoc/ru/appendices/migration.xml diff -u /dev/null phpdoc/ru/appendices/migration.xml:1.4 --- /dev/null Sun Feb 3 20:22:10 2002 +++ phpdoc/ru/appendices/migration.xml Sun Feb 3 20:22:10 2002 @@ -0,0 +1,402 @@ +<?xml version="1.0" encoding="windows-1251"?> +<!-- $Revision: 1.4 $ --> +<appendix id="migration"> + <title>Ïåðåõîä îò PHP/FI 2 ê PHP 3</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. Îíà íàõîäèòñÿ â + ïîäêàòàëîãå <filename class="directory">convertor</filename> äèñòðèáóòèâà + PHP 3.0. Ýòà ïðîãðàììà òîëüêî óñòðàíÿåò ñèíòàêñè÷åñêèå íåñîîòâåòñòâèÿ, + ïîýòîìó â ëþáîì ñëó÷àå âàì íóæíî âíèìàòåëüíî ïðî÷èòàòü ýòó ãëàâó. + </simpara> + </section> + + <section id="migration.startendtags"> + <title>Îòêðûâàþùèé/çàêðûâàþùèé òåãè</title> + + <para> + Èçìåíèâøèéñÿ îòêðûâàþùèé è çàêðûâàþùèé òåãè, âîçìîæíî, ïåðâîå, ÷òî âû + çàìåòèëè. Ïðåæíÿÿ ôîðìà <literal><? ></literal> áûëà çàìåíåíà + òðåìÿ íîâûìè: + <example> + <title>Ïåðåõîä: ïðåæíèå îòêðûâàþùèé/çàêðûâàþùèé òåãè</title> + <programlisting role="php"> +<![CDATA[ +<? echo "Ýòî êîä PHP/FI 2.0.\n"; ?> +]]> + </programlisting> + </example> +  âåðñèè 2.0 PHP/FI òàêæå ïîääåðæèâàåò òàêîé âàðèàíò: + <example> + <title>Ïåðåõîä: ïåðâûé âàðèàíò îòêðûâàþùèõ/çàêðûâàþùèõ òåãîâ</title> + <programlisting role="php"> +<![CDATA[ +<? echo "Ýòî êîä PHP 3.0!\n"; ?> +]]| + </programlisting> + </example> + + Îáðàòèòå âíèìàíèå, ÷òî òåïåðü çàêðûâàþùèé òåã ñîñòîèò èç + âîïðîñèòåëüíîãî çíàêà è ñèìâîëà 'áîëüøå' âìåñòî îäíîãî ñèìâîëà + 'áîëüøå'. Îäíàêî, åñëè âû ïëàíèðóåòå èñïîëüçîâàòü XML, + ó âàñ ìîãóò âîçíèêíóòü ïðîáëåìû ñ èñïîëüçîâàíèåì ïåðâîãî + âàðèàíòà, ïîñêîëüêó PHP ñìîæåò ïîïûòàòüñÿ âûïîëíèòü ðàçìåòêó + XML êàê êîä PHP. Âñëåäñòâèå ýòîãî, áûë ñîçäàí åùå îäèí + âàðèàíò: + + <example> + <title>Ïåðåõîä: âòîðîé âàðèàíò îòêðûâàþùèõ/çàêðûâàþùèõ òåãîâ</title> + <programlisting role="php"> +<![CDATA[ +<?php echo "Ýòî êîä PHP 3.0!\n"; ?> +]]> + </programlisting> + </example> + + Íåêîòîðûå ïîëüçîâàòåëè ñòàëêèâàëèñü ñ ïðîáëåìàìè ïðè èñïîëüçîâàíèè + ðåäàêòîðîâ, êîòîðûå âîîáùå íå âîñïðèíèìàþò óïðàâëÿþùèõ èíñòðóêöèé. + Òàêèì ðåäàêòîðîì, íàïðèìåð, ÿâëÿåòñÿ Microsoft FrontPage; è, ÷òîáû + èçáàâèòüñÿ îò ïðîáëåì ïîäîáíîãî ðîäà, áûë ñîçäàí ñëåäóþùèé âàðèàíò: + + <example> + <title>Ïåðåõîä: òðåòèé âàðèàíò îòêðûâàþùèõ/çàêðûâàþùèõ òåãîâ</title> + <programlisting role="php"> +<![CDATA[ +<script language="php"> + + echo "Ýòî êîä PHP 3.0!\n"; + +</script> +]]> + </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"> +<![CDATA[ +if ($foo); + echo "åñòü\n"; +elseif ($bar); + echo "ïî÷òè\n"; +else; + echo "íåò\n"; +endif; +]]> + </programlisting> + </example> + <example> + <title>Ïåðåõîä: íîâûé ñèíòàêñèñ if..endif</title> + <programlisting role="php"> +<![CDATA[ +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 èçìåíèëñÿ + as well: + <example> + <title>Ïåðåõîä: ïðåæíèé ñèíòàêñèñ while..endwhile</title> + <programlisting role="php"> +<![CDATA[ +while ($more_to_come); + ... +endwhile; +]]> + </programlisting> + </example> + <example> + <title>Ïåðåõîä: íîâûé ñèíòàêñèñ while..endwhile</title> + <programlisting role="php"> +<![CDATA[ +while ($more_to_come): + ... +endwhile; +]]> + </programlisting> + </example> + </para> + <warning> + <simpara> + Åñëè âû áóäåòå èñïîëüçîâàòü â PHP 3.0 ïðåæíèé ñèíòàêñèñ + while..endwhile syntax, ðåçóëüòàòîì áóäåò áåñêîíå÷íûé öèêë. + </simpara> + </warning> + </section> + + <section id="migration.expr"> + <title>Òèïû âûðàæåíèé</title> + <simpara> +  âåðñèè PHP/FI 2.0 äëÿ îïðåäåëåíèÿ òèïà ðåçóëüòàòà èñïîëüçîâàëàñü + ëåâàÿ ÷àñòü âûðàæåíèÿ. PHP 3.0 ïðè îïðåäåëåíèè òèïîâ ðåçóëüòàòà + ïðèíèìàåò âî âíèìàíèå îáå ÷àñòè âûðàæåíèé, ÷òî ìîæåò ïðèâåñòè + âûïîëíåíèå ñêðèïòîâ âåðñèè 2.0 ê íåïðåäñêàçóåìûì ðåçóëüòàòàì. + </simpara> + <para> + Ðàññìîòðèì ñëåäóþùèé ïðèìåð: + <informalexample> + <programlisting role="php"> +<![CDATA[ +$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 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"> +<![CDATA[ +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") or + fail("darn!");</literal>. Âñëåäñòâèå òîãî, ÷òî â PHP/FI 2.0 îòñóòñòâóþò + ÷åòêèå ïðàâèëà, îïðåäåëÿþùèå âîçâðàùàåìûå ôóíêöèÿìè çíà÷åíèÿ â + ðåçóëüòàòå èõ íåóäà÷íîãî âûïîëíåíèÿ, áîëüøèíñòâî òàêèõ ñêðèïòîâ + äîëæíû áûòü ïðîâåðåíû âðó÷íóþ ïîñëå èñïîëüçîâàíèÿ ïðåîáðàçîâàòåëÿ + ñêðèïòîâ âåðñèè 2.0 ê âåðñèè 3.0. + </simpara> + <para> + <example> + <title>Ïåðåõîä îò 2.0: âîçâðàùàåìûå çíà÷åíèÿ, ïðåæíèé êîä</title> + <programlisting role="php"> +<![CDATA[ +$fp = fopen($file, "r"); +if ($fp == -1); + echo("Îøèáêà îòêðûòèÿ ôàéëà $file äëÿ ÷òåíèÿ<br>\n"); +endif; +]]| + </programlisting> + </example> + <example> + <title>Ïåðåõîä îò 2.0: âîçâðàùàåìûå çíà÷åíèÿ, íîâûé êîä</title> + <programlisting role="php"> +<![CDATA[ +$fp = @fopen($file, "r") or print("Îøèáêà îòêðûòèÿ ôàéëà $file äëÿ ÷òåíèÿ<br>\n"); +]]> + </programlisting> + </example> + </para> + </section> + + <section id="migration-other"> + <title>Ïðî÷èå íåñîâìåñòèìîñòè</title> + + <itemizedlist> + <listitem><simpara> + Apache-ìîäóëü 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"> +<![CDATA[ +echo "1" + "1"; +]]> + </programlisting> + <para> +  PHP 2.0 ýòîò ñêðèïò âûâåäåò 11, â PHP 3.0 - + 2. Èñïîëüçóéòå: + <programlisting role="php"> +<![CDATA[ +echo "1"."1"; +]]> + </programlisting> + <programlisting role="php"> +<![CDATA[ +$a = 1; +$b = 1; +echo $a + $b; +]]> + </programlisting> + </para> + <para> + Ýòîò ñêðèïò âûâåäåò 2 è â PHP 2.0 è â PHP 3.0. + <programlisting role="php"> +<![CDATA[ +$a = 1; +$b = 1; +echo $a.$b; +]]> + </programlisting> + Ýòîò ñêðèïò âûâåäåò 11 â PHP 3.0. + </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 +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 +-->
Index: phpdoc/ru/appendices/migration.xml diff -u /dev/null phpdoc/ru/appendices/migration.xml:1.4 --- /dev/null Sun Feb 3 20:22:10 2002 +++ phpdoc/ru/appendices/migration.xml Sun Feb 3 20:22:10 2002 @@ -0,0 +1,402 @@ +<?xml version="1.0" encoding="windows-1251"?> +<!-- $Revision: 1.4 $ --> +<appendix id="migration"> + <title>Ïåðåõîä îò PHP/FI 2 ê PHP 3</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. Îíà íàõîäèòñÿ â + ïîäêàòàëîãå <filename class="directory">convertor</filename> äèñòðèáóòèâà + PHP 3.0. Ýòà ïðîãðàììà òîëüêî óñòðàíÿåò ñèíòàêñè÷åñêèå íåñîîòâåòñòâèÿ, + ïîýòîìó â ëþáîì ñëó÷àå âàì íóæíî âíèìàòåëüíî ïðî÷èòàòü ýòó ãëàâó. + </simpara> + </section> + + <section id="migration.startendtags"> + <title>Îòêðûâàþùèé/çàêðûâàþùèé òåãè</title> + + <para> + Èçìåíèâøèéñÿ îòêðûâàþùèé è çàêðûâàþùèé òåãè, âîçìîæíî, ïåðâîå, ÷òî âû + çàìåòèëè. Ïðåæíÿÿ ôîðìà <literal><? ></literal> áûëà çàìåíåíà + òðåìÿ íîâûìè: + <example> + <title>Ïåðåõîä: ïðåæíèå îòêðûâàþùèé/çàêðûâàþùèé òåãè</title> + <programlisting role="php"> +<![CDATA[ +<? echo "Ýòî êîä PHP/FI 2.0.\n"; ?> +]]> + </programlisting> + </example> +  âåðñèè 2.0 PHP/FI òàêæå ïîääåðæèâàåò òàêîé âàðèàíò: + <example> + <title>Ïåðåõîä: ïåðâûé âàðèàíò îòêðûâàþùèõ/çàêðûâàþùèõ òåãîâ</title> + <programlisting role="php"> +<![CDATA[ +<? echo "Ýòî êîä PHP 3.0!\n"; ?> +]]| + </programlisting> + </example> + + Îáðàòèòå âíèìàíèå, ÷òî òåïåðü çàêðûâàþùèé òåã ñîñòîèò èç + âîïðîñèòåëüíîãî çíàêà è ñèìâîëà 'áîëüøå' âìåñòî îäíîãî ñèìâîëà + 'áîëüøå'. Îäíàêî, åñëè âû ïëàíèðóåòå èñïîëüçîâàòü XML, + ó âàñ ìîãóò âîçíèêíóòü ïðîáëåìû ñ èñïîëüçîâàíèåì ïåðâîãî + âàðèàíòà, ïîñêîëüêó PHP ñìîæåò ïîïûòàòüñÿ âûïîëíèòü ðàçìåòêó + XML êàê êîä PHP. Âñëåäñòâèå ýòîãî, áûë ñîçäàí åùå îäèí + âàðèàíò: + + <example> + <title>Ïåðåõîä: âòîðîé âàðèàíò îòêðûâàþùèõ/çàêðûâàþùèõ òåãîâ</title> + <programlisting role="php"> +<![CDATA[ +<?php echo "Ýòî êîä PHP 3.0!\n"; ?> +]]> + </programlisting> + </example> + + Íåêîòîðûå ïîëüçîâàòåëè ñòàëêèâàëèñü ñ ïðîáëåìàìè ïðè èñïîëüçîâàíèè + ðåäàêòîðîâ, êîòîðûå âîîáùå íå âîñïðèíèìàþò óïðàâëÿþùèõ èíñòðóêöèé. + Òàêèì ðåäàêòîðîì, íàïðèìåð, ÿâëÿåòñÿ Microsoft FrontPage; è, ÷òîáû + èçáàâèòüñÿ îò ïðîáëåì ïîäîáíîãî ðîäà, áûë ñîçäàí ñëåäóþùèé âàðèàíò: + + <example> + <title>Ïåðåõîä: òðåòèé âàðèàíò îòêðûâàþùèõ/çàêðûâàþùèõ òåãîâ</title> + <programlisting role="php"> +<![CDATA[ +<script language="php"> + + echo "Ýòî êîä PHP 3.0!\n"; + +</script> +]]> + </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"> +<![CDATA[ +if ($foo); + echo "åñòü\n"; +elseif ($bar); + echo "ïî÷òè\n"; +else; + echo "íåò\n"; +endif; +]]> + </programlisting> + </example> + <example> + <title>Ïåðåõîä: íîâûé ñèíòàêñèñ if..endif</title> + <programlisting role="php"> +<![CDATA[ +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 èçìåíèëñÿ + as well: + <example> + <title>Ïåðåõîä: ïðåæíèé ñèíòàêñèñ while..endwhile</title> + <programlisting role="php"> +<![CDATA[ +while ($more_to_come); + ... +endwhile; +]]> + </programlisting> + </example> + <example> + <title>Ïåðåõîä: íîâûé ñèíòàêñèñ while..endwhile</title> + <programlisting role="php"> +<![CDATA[ +while ($more_to_come): + ... +endwhile; +]]> + </programlisting> + </example> + </para> + <warning> + <simpara> + Åñëè âû áóäåòå èñïîëüçîâàòü â PHP 3.0 ïðåæíèé ñèíòàêñèñ + while..endwhile syntax, ðåçóëüòàòîì áóäåò áåñêîíå÷íûé öèêë. + </simpara> + </warning> + </section> + + <section id="migration.expr"> + <title>Òèïû âûðàæåíèé</title> + <simpara> +  âåðñèè PHP/FI 2.0 äëÿ îïðåäåëåíèÿ òèïà ðåçóëüòàòà èñïîëüçîâàëàñü + ëåâàÿ ÷àñòü âûðàæåíèÿ. PHP 3.0 ïðè îïðåäåëåíèè òèïîâ ðåçóëüòàòà + ïðèíèìàåò âî âíèìàíèå îáå ÷àñòè âûðàæåíèé, ÷òî ìîæåò ïðèâåñòè + âûïîëíåíèå ñêðèïòîâ âåðñèè 2.0 ê íåïðåäñêàçóåìûì ðåçóëüòàòàì. + </simpara> + <para> + Ðàññìîòðèì ñëåäóþùèé ïðèìåð: + <informalexample> + <programlisting role="php"> +<![CDATA[ +$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 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"> +<![CDATA[ +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") or + fail("darn!");</literal>. Âñëåäñòâèå òîãî, ÷òî â PHP/FI 2.0 îòñóòñòâóþò + ÷åòêèå ïðàâèëà, îïðåäåëÿþùèå âîçâðàùàåìûå ôóíêöèÿìè çíà÷åíèÿ â + ðåçóëüòàòå èõ íåóäà÷íîãî âûïîëíåíèÿ, áîëüøèíñòâî òàêèõ ñêðèïòîâ + äîëæíû áûòü ïðîâåðåíû âðó÷íóþ ïîñëå èñïîëüçîâàíèÿ ïðåîáðàçîâàòåëÿ + ñêðèïòîâ âåðñèè 2.0 ê âåðñèè 3.0. + </simpara> + <para> + <example> + <title>Ïåðåõîä îò 2.0: âîçâðàùàåìûå çíà÷åíèÿ, ïðåæíèé êîä</title> + <programlisting role="php"> +<![CDATA[ +$fp = fopen($file, "r"); +if ($fp == -1); + echo("Îøèáêà îòêðûòèÿ ôàéëà $file äëÿ ÷òåíèÿ<br>\n"); +endif; +]]| + </programlisting> + </example> + <example> + <title>Ïåðåõîä îò 2.0: âîçâðàùàåìûå çíà÷åíèÿ, íîâûé êîä</title> + <programlisting role="php"> +<![CDATA[ +$fp = @fopen($file, "r") or print("Îøèáêà îòêðûòèÿ ôàéëà $file äëÿ ÷òåíèÿ<br>\n"); +]]> + </programlisting> + </example> + </para> + </section> + + <section id="migration-other"> + <title>Ïðî÷èå íåñîâìåñòèìîñòè</title> + + <itemizedlist> + <listitem><simpara> + Apache-ìîäóëü 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"> +<![CDATA[ +echo "1" + "1"; +]]> + </programlisting> + <para> +  PHP 2.0 ýòîò ñêðèïò âûâåäåò 11, â PHP 3.0 - + 2. Èñïîëüçóéòå: + <programlisting role="php"> +<![CDATA[ +echo "1"."1"; +]]> + </programlisting> + <programlisting role="php"> +<![CDATA[ +$a = 1; +$b = 1; +echo $a + $b; +]]> + </programlisting> + </para> + <para> + Ýòîò ñêðèïò âûâåäåò 2 è â PHP 2.0 è â PHP 3.0. + <programlisting role="php"> +<![CDATA[ +$a = 1; +$b = 1; +echo $a.$b; +]]> + </programlisting> + Ýòîò ñêðèïò âûâåäåò 11 â PHP 3.0. + </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 +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 +-->