cvs: phpdoc-sk /appendices debugger.xml history.xml migration4.xml migration5.xml
[email protected] ("Joseph Drake") Thu, 08 Jul 2004 00:09:30 -0000
| Newsgroups | php.doc.sk |
|---|---|
| Message-ID | <cvsjoseph1089245370@cvsserver> |
joseph Wed Jul 7 20:09:30 2004 EDT
Modified files:
/phpdoc-sk/appendices debugger.xml history.xml migration4.xml
migration5.xml
Log:
updated
joseph-20040707200930.txt
(text/plain, 57.1 KB)
http://cvs.php.net/diff.php/phpdoc-sk/appendices/debugger.xml?r1=1.6&r2=1.7&ty=u
Index: phpdoc-sk/appendices/debugger.xml
diff -u phpdoc-sk/appendices/debugger.xml:1.6 phpdoc-sk/appendices/debugger.xml:1.7
--- phpdoc-sk/appendices/debugger.xml:1.6 Wed Feb 11 19:11:32 2004
+++ phpdoc-sk/appendices/debugger.xml Wed Jul 7 20:09:30 2004
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="iso-8859-2"?>
-<!-- EN-Revision: 1.26 Maintainer: joseph Status: ready -->
+<!-- EN-Revision: 1.27 Maintainer: joseph Status: ready -->
<appendix id="debugger">
<title>Ladenie PHP</title>
@@ -80,11 +80,11 @@
<para>
Riadok má tento formát:
<informalexample>
- <literallayout>
+ <programlisting>
<![CDATA[
date time host(pid) type: message-data
]]>
- </literallayout>
+ </programlisting>
</informalexample>
</para>
<para>
http://cvs.php.net/diff.php/phpdoc-sk/appendices/history.xml?r1=1.8&r2=1.9&ty=u
Index: phpdoc-sk/appendices/history.xml
diff -u phpdoc-sk/appendices/history.xml:1.8 phpdoc-sk/appendices/history.xml:1.9
--- phpdoc-sk/appendices/history.xml:1.8 Wed Feb 11 19:11:32 2004
+++ phpdoc-sk/appendices/history.xml Wed Jul 7 20:09:30 2004
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="iso-8859-2"?>
-<!-- EN-Revision: 1.22 Maintainer: joseph Status: ready -->
+<!-- EN-Revision: 1.24 Maintainer: joseph Status: ready -->
<appendix id="history">
<title>História PHP a súvisiacich projektov</title>
@@ -306,7 +306,7 @@
Èlánky o PHP sa objavili v Dr. Dobbs, Linux Enterprise,
Linux Magazine a v mnohých ïal¹ích. Èlánky o aplikáciách
zalo¾ených na ASP migrujúcich do PHP pod Windows sa dokonca
- objavili aj na Microsoft <acronym>MSDN</acronym>!
+ objavili aj na <productname>Microsoft</productname> <acronym>MSDN</acronym>!
</para>
</sect1>
http://cvs.php.net/diff.php/phpdoc-sk/appendices/migration4.xml?r1=1.9&r2=1.10&ty=u
Index: phpdoc-sk/appendices/migration4.xml
diff -u phpdoc-sk/appendices/migration4.xml:1.9 phpdoc-sk/appendices/migration4.xml:1.10
--- phpdoc-sk/appendices/migration4.xml:1.9 Wed Feb 11 19:11:32 2004
+++ phpdoc-sk/appendices/migration4.xml Wed Jul 7 20:09:30 2004
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="iso-8859-2"?>
-<!-- EN-Revision: 1.36 Maintainer: joseph Status: ready -->
+<!-- EN-Revision: 1.37 Maintainer: joseph Status: ready -->
<appendix id="migration4">
<title>Migrácia z PHP 3 na PHP 4</title>
@@ -442,7 +442,7 @@
Zatial èo zaobchádzanie s globálnymi premennými malo v PHP 3 a
prvých verziách PHP 4 jednoduchý fokus, fokus sa zmenil, aby bol
bezpeènej¹í. Zatial èo následujúci príklad v PHP 3 fungoval v pohode,
- v PHP 4 to musí by» ($GLOBALS["id"]);. Toto je len jeden problém
+ v PHP 4 to musí by» unset(<literal>unset($GLOBALS["id"])</literal>);. Toto je len jeden problém
zaobchádzania s globálnymi premennými. Mali by ste v¾dy pou¾íva»
$GLOBALS, pri nových verziách PHP 4 ste tak nútení urobi» vo väè¹ine
prípadov. O tejto téme sa viac doèítate v <link linkend="references.global">
http://cvs.php.net/diff.php/phpdoc-sk/appendices/migration5.xml?r1=1.1&r2=1.2&ty=u
Index: phpdoc-sk/appendices/migration5.xml
diff -u phpdoc-sk/appendices/migration5.xml:1.1 phpdoc-sk/appendices/migration5.xml:1.2
--- phpdoc-sk/appendices/migration5.xml:1.1 Wed Feb 11 19:12:22 2004
+++ phpdoc-sk/appendices/migration5.xml Wed Jul 7 20:09:30 2004
@@ -1,90 +1,189 @@
<?xml version="1.0" encoding="iso-8859-2"?>
-<!-- EN-Revision: 1.4 Maintainer: joseph Status: ready -->
+<!-- EN-Revision: 1.21 Mainteiner: joseph Status: ready -->
<appendix id="migration5">
<title>Migrácia z PHP 4 na PHP 5</title>
<section id='migration5.changes'>
<title>Èo sa zmenilo v PHP 5</title>
<para>
- PHP 5 a integrovaný Zend Engine 2 významne zlep¹ili výkon
- a schopnosti PHP, ale významná pozornos» sa venovala èo najmen¹iemu
- poru¹eniu existujúceho kódu. Tak¾e migrácia vá¹ho kódu z PHP 4 na 5
- by malo by» µahké. Väè¹ina existujúceho PHP 4 kódu by mala by» pripravená
- na beh bez zmien, ale stále by ste mali vedie» o <link
- linkend="migration5.incompatible">pár odli¹nostiach</link> a
- postara» sa o testovanie vá¹ho kódu pred prepnutím verzií v produkènom
- prostredí.
+ PHP 5 a integrovaný Zend Engine 2 veµkolepo zlep¹ili výkon a
+ schopnosti PHP, ale veµká staros» bola venovaná poru¹eniu èo najmen¹ieho
+ mno¾stva existujúceho kódu. Tak¾e migrovanie vá¹ho kódu z PHP 4 na 5
+ by malo by» veµmi jednoduché. Existujúci PHP 4 kód by mal by» pripravený
+ be¾a» bez zmien, ale zav¹e by ste mali vedie» o <link
+ linkend="migration5.incompatible">pár rozdieloch</link> a postara»
+ sa o testovanie vá¹ho kódu pred prepnutím verzií v produkèných
+ prostrediach.
</para>
</section>
<section id="migration5.incompatible">
- <title>Spätné Nekompaktibilné Zmeny</title>
+ <title>Spätne Nekompatibilné Zmeny</title>
<para>
- I keï väè¹ina existujúceho PHP 4 kódu by mala fungova» bez zmien, mali by
- venova» pozornos» týmto spätným nekompaktibilným zmenám:
+ I keï vaè¹ina existujúceho PHP 4 kódu by mala fungova» bez zmien, mali by
+ ste da» pozor na následujúce spätne nekompatibilné zmeny:
</para>
<itemizedlist>
<listitem><simpara>
<function>strrpos</function> a <function>strripos</function> teraz
- pou¾ívajú celý re»azec ako ihlu.
+ vyu¾ívajú celý re»azec ako ihlu.
</simpara></listitem>
<listitem><simpara>
- Nelegálne pou¾itie offsetov re»azca spôsobuje <constant>E_ERROR</constant> namesto
- <constant>E_WARNING</constant>.
+ Nelegálne pou¾itie offsetov re»azca spôsobuje <constant>E_ERROR</constant>
+ namiesto <constant>E_WARNING</constant>.
</simpara></listitem>
<listitem><simpara>
- <function>array_merge</function> bola zmenená na akceptovanie iba polí.
- Ak sa vlo¾í premenná, ktorá nie je typu array, <constant>E_WARNING</constant>
- sa objaví pre ka¾dý taký parameter. Buïte opatrný preto¾e vá¹ kód mô¾e
- zaèa» emitova» <constant>E_WARNING</constant> z èista jasna.
+ <function>array_merge</function> bola zmenená, aby prijímala iba polia.
+ Ak sa po¹le premenná, ktorá nie je pole, vyhodí sa <constant>E_WARNING</constant>
+ pre ka¾dý taký parameter. Buïte opatrný, preto¾e vá¹ kód mô¾e zaèa» emitova»
+ <constant>E_WARNING</constant> z nièoho niè.
</simpara></listitem>
<listitem><simpara>
- PATH_TRANSLATED premenná servera u¾ nie je implicitne nastavená pod
- Apache2 SAPI na rozdiel od situácie v PHP 4, kde je nastavená na
- rovnakú hodnotu ako SCRIPT_FILENAME premenná servera, keï nie je
- obsadená Apacheom. Táto zmena sa urobila na vyhovenie s <ulink
- url="&url.cgispecs;">CGI ¹pecifikáciou</ulink>. Prosím, pozrite si <ulink
- url="&url.php.bugs;23610">bug #23610</ulink> pre ïal¹ie informácie.
+ Premenná servera PATH_TRANSLATED u¾ viac nie je nastavená implicitne pod
+ Apache2 SAPI ako kontrast k situácii v PHP 4, kde je nastavená na
+ rovnakú hodnotu ako premenná servera SCRIPT_FILENAME, kde nie je obývaná
+ Apache-om. Táto zmena bola urobená, aby vyhovovala <ulink
+ url="&url.cgispecs;">CGI ¹pecifikácii</ulink>. Prosím, pozrite si <ulink
+ url="&url.php.bugs;23610">bug #23610</ulink> pre viac informácii.
</simpara></listitem>
<listitem><simpara>
- Kon¹tanta <constant>T_ML_CONSTANT</constant> u¾ nie je definovaná
- roz¹írením <link linkend="ref.tokenizer">Tokenizer</link>. Ak je
- error_reporting nastanený na <constant>E_ALL</constant>, PHP vygeneruje
- oznam. Namiesto <constant>T_ML_CONSTANT</constant> pre /* */ sa pou¾ije
- kon¹tanta <constant>T_COMMENT</constant>, i keï obe // a /* */
- sa berú ako kon¹tanta <constant>T_COMMENT</constant>. Av¹ak PHPDoc
- ¹týlové komentáre /** */ , ktoré poèínajúc PHP5 sú analyzované PHP-èkom,
- sú rozpoznávané ako <constant>T_DOC_COMMENT</constant>.
+ Kon¹tanta <constant>T_ML_CONSTANT</constant> u¾ nie je definovaná roz¹írením
+ <link linkend="ref.tokenizer">Tokenizer</link>. Ak je error_reporting
+ nastavený na <constant>E_ALL</constant>, PHP vygeneruje hlá¹ku.
+ I keï <constant>T_ML_CONSTANT</constant> sa nikdy vôbec nepo¾ila,
+ bola definovaná v PHP 4. V oboch PHP 4 a PHP 5 // a /* */
+ sa chápu ako kon¹tanta <constant>T_COMMENT</constant>. Av¹ak PHPDoc
+ ¹týlové komentáre /** */ , ktoré zaèínajú PHP 5 sú analyzované PHP, sa
+ rozpoznávajú ako <constant>T_DOC_COMMENT</constant>.
</simpara></listitem>
<listitem><simpara>
- $_SERVER by mala by» obsadená s argc a argv ak variables_order
- zahàòa "S". Ak ste ¹pecificky nakonfigurovali svoj systém na
- nevytváranie $_SERVER, potom samozrejme by tam nemala by». Zmena bola
- v¾dy urobi» z argc a argv premennú v CLI verziu bez ohµadu na
- nastavenie variables_order. CLI verzia bude v¾dy obsadzova»
- globálne premenné $argc a $argv.
+ $_SERVER by mala by» obývaná s argc a argv ak <link
+ linkend="ini.variables-order">variables_order</link> zahàòa "S". Ak
+ ste ¹pecificky konfigurovali vá¹ system, aby nevytváral $_SERVER,
+ potom samozrejme by tam nemala by». Zmenou bolo v¾dy urobi» argc
+ a argv dostupné v CLI verzii bez ohµadu na nastavenie <link
+ linkend="ini.variables-order">variables_order</link>. CLI verzia
+ bude teraz v¾dy obýva» globálne premenné $argc a $argv.
</simpara></listitem>
<listitem><simpara>
- Triedy sa musia pred pou¾itím deklarova».
+ Objekt so ¾iadnymi vlastnos»ami sa u¾ viac nepova¾uje za "empty".
+ </simpara></listitem>
+ <listitem><simpara>
+ V niektorých prípadoch triedy musia by» deklarované pred pou¾itím. Stane sa tak iba
+ ak sa pou¾ije niektorá z nových vlastností PHP 5. Inak je správanie
+ staré.
+ </simpara></listitem>
+ <listitem><simpara>
+ <function>get_class</function> poèínajúc PHP 5 vracia názov triedy
+ ako bola deklarovaná, èo mô¾e vies» k problémom v star¹ích skriptoch,
+ ktoré sa spoliehajú na predo¹lé správanie (názov triedy je lowercase).
+ Mo¾né rie¹enie je vyhµada» <function>get_class</function> vo
+ va¹ich skriptoch a pou¾i» <function>strtolower</function>.
+ </simpara></listitem>
+ <listitem><simpara>
+ <function>ip2long</function> teraz vracia FALSE, keï sa po¹le neplatná IP
+ adresa ako argument funkcii a u¾ nie
+ <literal>-1</literal>.
</simpara></listitem>
</itemizedlist>
+
+ <para>
+ <example>
+ <title><function>strrpos</function> a <function>strripos</function> teraz
+ pou¾íva celý re»azec ako ihlu</title>
+ <programlisting role="php">
+<![CDATA[
+<?php
+var_dump(strrpos('ABCDEF','DEF')); //int(3)
+
+var_dump(strrpos('ABCDEF','DAF')); //bool(false)
+?>
+]]>
+ </programlisting>
+ </example>
+ </para>
+ <para>
+ <example>
+ <title>Objekt so ¾iadnými vlastnos»ami sa u¾ viac nepova¾uje za "empty"</title>
+ <programlisting role="php">
+<![CDATA[
+<?php
+class test { }
+$t = new test();
+
+var_dump(empty($t)); // echo bool(false)
+
+if (!$t) {
+ // Sa vykona
+}
+?>
+]]>
+ </programlisting>
+ </example>
+ </para>
+ <para>
+ <example>
+ <title>V niektorých prípadoch sa triedy pred pou¾itím musia deklarova»</title>
+ <programlisting role="php">
+<![CDATA[
+<?php
+
+//funguje bez chyb:
+$a = new a();
+class a {
+}
+
+
+//vyhodi chybu:
+$a = new b();
+
+interface c{
+}
+class b implements c {
+}
+
+?>
+]]>
+ </programlisting>
+ </example>
+ </para>
+ </section>
+
+ <section id="migration5.cli-cgi">
+ <title>CLI a CGI</title>
+ <para>
+ V PHP 5 boli urobené nejaké zmeny v názvoch súborov CLI a CGI. V PHP 5
+ bola CGI verzia premenovaná na <literal>php-cgi.exe</literal> (pred tým
+ <literal>php.exe</literal>) a CLI verzia je teraz v hlavnom adresári
+ (pred tým <literal>cli/php.exe</literal>).
+ </para>
+ <para>
+ V PHP 5 bol tie¾ predstavený nový mód:
+ <literal>php-win.exe</literal>. Tento je zhodný s CLI verziou, a¾ na to, ¾e
+ php-win neposiela na výstup niè, a teda poskytuje ¾iadnu konzolu (¾iadne
+ "dosovské okno" sa obrazovke neobjaví). Toto správanie je podobné k php-gtk.
+ </para>
+ <para>
+ V PHP 5 bude CLI verzia v¾dy obýva» globálne premenné $argv a $argc.
+ </para>
</section>
<section id="migration5.configuration">
- <title>Migrujúce Konfiguraèné Súbory</title>
+ <title>Migrácia konfiguraèných súborov</title>
<para>
- Nakoµko si ISAPI moduly zmenili svoje názvy, z php4xxx na php5xxx,
- musíte urobi» nejaké zmeny v konfiguraèných súboroch. Tie¾ nastali
- zmeny v názvoch súborov CLI a CGI. Prosím, pozrite si zodpovedajúcu
- sekciu pre viac informácii.
+ Nakoµko ISAPI moduly zmenili svoje názvy, od php4xxx do php5xxx, musíte
+ urobi» niekoµko zmien v konfiguraèných súboroch. Tie¾ boli urobené
+ zmeny v názvoch súborov CLI a CGI. Prosím, pozrite si <link
+ linkend="migration5.cli-cgi">zodpovedajúcu sekciu</link> pre viac
+ informácii.
</para>
<para>
- Migrovanie Apache konfigurácie je extrémne jednoduché. Prozri príklad
- uvedený ni¾¹ie na kontrolu zmien, ktoré musíte urobi»:
+ Migrova» Apache konfiguráciu je extrémne jednoduché. Pozrite si ni¾¹ie uvedený
+ príklad a zistite, ktoré zmeny musíte urobi»:
<informalexample>
<programlisting role="apache-conf">
<![CDATA[
-# zamente tento riadok:
+# zamente tento riadok:
LoadModule php4_module /php/sapi/php4apache2.dll
# za tento:
@@ -94,13 +193,13 @@
</informalexample>
</para>
<para>
- Ak na vá¹om webserveri be¾í PHP v CGI móde, mali by ste si v¹imnú», ¾e
- si CGI verzia zmenila svoj názov z php.exe na php-cgi.exe.
+ Ak na va¹om webserveri PHP be¾í v CGI móde, mali by ste si v¹timnú», ¾e
+ CGI verzia si zmenila svoj názov z php.exe na php-cgi.exe.
V Apache by ste mali urobi» nieèo takéto:
<informalexample>
<programlisting role="apache-conf">
<![CDATA[
-# zamente tento riadok:
+# zamente tento riadok:
Action application/x-httpd-php "/php/php.exe"
# za tento:
@@ -110,9 +209,1389 @@
</informalexample>
</para>
<para>
- V iných webserveroch musíte zmeni» názvy súborov buï v CGI alebo ISAPI
- moduloch.
+ V iných webserveroch musíte zmeni» názov súboru buï CGI alebo ISAPI modulu.
+ </para>
+ </section>
+
+ <section id="migration5.functions">
+ <title>Nové funkcie</title>
+ <para>
+ V PHP 5 sú nejaké nové funkcie. Tu je ich zoznam:
+ </para>
+ <para>Polia:</para>
+ <itemizedlist>
+ <listitem><simpara>
+ <function>array_combine</function> - Vytvára pole pomocou jedného poµa
+ pre kµúèe a druhého pre jeho hodnoty
+ </simpara></listitem>
+ <listitem><simpara>
+ <function>array_diff_uassoc</function> - Vypoèíta rozdiel polí
+ s dodatoènou kontrolou indexov, ktorá sa vykoná u¾ívateµom dodanou
+ callback funkciou
+ </simpara></listitem>
+ <listitem><simpara>
+ <function>array_udiff</function> - Vypoèíta rozdiel polí pomocou
+ callback funkcie pre dátove porovnanie
+ </simpara></listitem>
+ <listitem><simpara>
+ <function>array_udiff_assoc</function> - Vypoèíta rozdiel polí
+ s dodatoènou kontrolou indexov. Dáta sa porovnávajú pomocou callback
+ funkcie
+ </simpara></listitem>
+ <listitem><simpara>
+ <function>array_udiff_uassoc</function> - Vypoèíta rozdiel polí
+ s dodatoènou kontrolou indexov. Dáta sa porovnávajú pomocou callback
+ funkcie. Kontrola indexov sa tie¾ vykoná callback funkciou
+ </simpara></listitem>
+ <listitem><simpara>
+ <function>array_walk_recursive</function> - Aplikuje u¾ívateµskú funkciu
+ rekurzívne na ka¾dého èlena poµa
+ </simpara></listitem>
+ </itemizedlist>
+
+ <para>InterBase:</para>
+ <itemizedlist>
+ <listitem><simpara>
+ <function>ibase_affected_rows</function> - Vracia poèet riadkov, ktoré
+ sú ovplyvnené predo¹lým dotazom
+ </simpara></listitem>
+ <listitem><simpara>
+ <function>ibase_backup</function> - Inicializuje zálohovaciu úlohu
+ v mana¾éri slu¾ieb a vracia okam¾ite
+ </simpara></listitem>
+ <listitem><simpara>
+ <function>ibase_commit_ret</function> - Vykoná transakciu bez jej
+ uzatvorenia
+ </simpara></listitem>
+ <listitem><simpara>
+ <function>ibase_db_info</function> - Vy¾iada ¹tatistiku o
+ databáze
+ </simpara></listitem>
+ <listitem><simpara>
+ <function>ibase_drop_db</function> - Odstráni databázu
+ </simpara></listitem>
+ <listitem><simpara>
+ <function>ibase_errcode</function> - Vracia kód chyby
+ </simpara></listitem>
+ <listitem><simpara>
+ <function>ibase_free_event_handler</function> - Zru¹í registrovaný
+ handler udalostí
+ </simpara></listitem>
+ <listitem><simpara>
+ <function>ibase_gen_id</function> - Inkrementuje nazvaný generátor
+ a vracia jeho novú hodnotu
+ </simpara></listitem>
+ <listitem><simpara>
+ <function>ibase_maintain_db</function> - Vykoná príkaz údr¾by na
+ databázovom serveri
+ </simpara></listitem>
+ <listitem><simpara>
+ <function>ibase_name_result</function> - Priradí názov sade výsledkov
+ </simpara></listitem>
+ <listitem><simpara>
+ <function>ibase_num_params</function> - Vracia poèet parametrov
+ v pripravenom dotaze
+ </simpara></listitem>
+ <listitem><simpara>
+ <function>ibase_param_info</function> - Vracia informáciu o
+ parametri v pripravenom dotaze
+ </simpara></listitem>
+ <listitem><simpara>
+ <function>ibase_restore</function> - Zahajuje obnovovaciu úlohu v
+ mana¾éri slu¾ieb a vracia okam¾ite
+ </simpara></listitem>
+ <listitem><simpara>
+ <function>ibase_rollback_ret</function> - Zroluje transakciu a
+ uchova» kontext transakcie
+ </simpara></listitem>
+ <listitem><simpara>
+ <function>ibase_server_info</function> - Vy¾iada ¹tatistiku o
+ databáze
+ </simpara></listitem>
+ <listitem><simpara>
+ <function>ibase_service_attach</function> - Pripojí sa na mana¾éra slu¾ieb
+ </simpara></listitem>
+ <listitem><simpara>
+ <function>ibase_service_detach</function> - Odpojí sa z mana¾éra slu¾ieb
+ </simpara></listitem>
+ <listitem><simpara>
+ <function>ibase_set_event_handler</function> - Registruje callback
+ funkciu, aby sa volala pri poslaní udalosti
+ </simpara></listitem>
+ <listitem><simpara>
+ <function>ibase_wait_event</function> - Èaká na udalos», ktorá má posla»
+ databáza
+ </simpara></listitem>
+ </itemizedlist>
+
+ <para>iconv:</para>
+ <itemizedlist>
+ <listitem><simpara>
+ <function>iconv_mime_decode</function> - Dekóduje MIME pole hlavièky
+ </simpara></listitem>
+ <listitem><simpara>
+ <function>iconv_mime_decode_headers</function> - Dekóduje viaceré MIME
+ polia hlavièiek naráz
+ </simpara></listitem>
+ <listitem><simpara>
+ <function>iconv_mime_encode</function> - Komponuje MIME pole hlavièky
+ </simpara></listitem>
+ <listitem><simpara>
+ <function>iconv_strlen</function> - Vracia poèet znakov re»azca
+ </simpara></listitem>
+ <listitem><simpara>
+ <function>iconv_strpos</function> - Hµadá pozíciu prvého výskytu
+ ihly v kope sena
+ </simpara></listitem>
+ <listitem><simpara>
+ <function>iconv_strrpos</function> - Hµadá posledný výskyt ihly
+ v urèenom rozsahu kopy sena
+ </simpara></listitem>
+ <listitem><simpara>
+ <function>iconv_substr</function> - Odstrihne èas» re»azca
+ </simpara></listitem>
+ </itemizedlist>
+
+ <para>Prúdy:</para>
+ <itemizedlist>
+ <listitem><simpara>
+ <function>stream_copy_to_stream</function> - Kopíruje dáta z jedného prúdu
+ do druhého
+ </simpara></listitem>
+ <listitem><simpara>
+ <function>stream_get_line</function> - Získa riadok zo zdroja prúdu
+ a¾ po daný oddelovaè
+ </simpara></listitem>
+ <listitem><simpara>
+ <function>stream_socket_accept</function> - Akceptuje pripojenie na
+ soket, ktorý vytvoril <function>stream_socket_server</function>
+ </simpara></listitem>
+ <listitem><simpara>
+ <function>stream_socket_client</function> - Otvára Internetové alebo Unixové
+ pripojenie soketu domény
+ </simpara></listitem>
+ <listitem><simpara>
+ <function>stream_socket_get_name</function> - Získa názov miestnych
+ alebo vzdialených soketov
+ </simpara></listitem>
+ <listitem><simpara>
+ <function>stream_socket_recvfrom</function> - Prijíma dáta zo
+ soketu, pripojeného alebo nie
+ </simpara></listitem>
+ <listitem><simpara>
+ <function>stream_socket_sendto</function> - Posiela správu soketu,
+ èi je pripojený alebo nie
+ </simpara></listitem>
+ <listitem><simpara>
+ <function>stream_socket_server</function> - Vytvára Internetový alebo Unixový
+ soket domény servera
+ </simpara></listitem>
+ </itemizedlist>
+
+ <para>Iné:</para>
+ <itemizedlist>
+ <listitem><simpara>
+ <function>convert_uudecode</function> - dekóduje uu-kódovaný re»azec
+ </simpara></listitem>
+ <listitem><simpara>
+ <function>convert_uuencode</function> - uu-kóduje re»azec
+ </simpara></listitem>
+ <listitem><simpara>
+ <function>curl_copy_handle</function> - Kopíruje cURL handle
+ spolu so v¹etkými jeho preferenciami
+ </simpara></listitem>
+ <listitem><simpara>
+ <function>dba_key_split</function> - Rozdelí kµúè v reprezentácii
+ re»azca do reprezentácie poµa
+ </simpara></listitem>
+ <listitem><simpara>
+ <function>dbase_get_header_info</function> -Získa info o hlavièke
+ dBase databázy
+ </simpara></listitem>
+ <listitem><simpara>
+ <function>dbx_fetch_row</function> - Prinesie riadky z dotazu-výsledku,
+ ktorý mal DBX_RESULT_UNBUFFERED flag sadu
+ </simpara></listitem>
+ <listitem><simpara>
+ <function>fbsql_set_password</function> - Zmení heslo pre daného u¾ívateµa
+ </simpara></listitem>
+ <listitem><simpara>
+ <function>file_put_contents</function> - Zapí¹e re»azec do súboru
+ </simpara></listitem>
+ <listitem><simpara>
+ <function>ftp_alloc</function> - Alokuje miesto pre súbor, ktorý sa
+ má uploadova»
+ </simpara></listitem>
+ <listitem><simpara>
+ <function>get_declared_interfaces</function> - Vracia pole v¹etkých
+ deklarovaných rohraní
+ </simpara></listitem>
+ <listitem><simpara>
+ <function>get_headers</function> - Prinesie v¹etky hlavièky poslané
+ serverom v odovzve na HTTP po¾iadavku
+ </simpara></listitem>
+ <listitem><simpara>
+ <function>headers_list</function> - Vracia zoznam poslaných hlavièiek odozvy
+ (alebo pripravených na poslanie)
+ </simpara></listitem>
+ <listitem><simpara>
+ <function>http_build_query</function> - Generuje URL-kódovaný query re»azec
+ </simpara></listitem>
+ <listitem><simpara>
+ <function>idate</function> - Formátuju miestny èas/dátum ako integer
+ </simpara></listitem>
+ <listitem><simpara>
+ <function>image_type_to_extension</function> - Získa roz¹írenie súboru pre
+ typ-image, ktorý vráti <function>getimagesize</function>,
+ <function>exif_read_data</function>,
+ <function>exif_thumbnail</function>,
+ <function>exif_imagetype</function>
+ </simpara></listitem>
+ <listitem><simpara>
+ <function>imagefilter</function> - Aplikuje Filter na image pomocou
+ vlastného uhla
+ </simpara></listitem>
+ <listitem><simpara>
+ <function>imap_getacl</function> - Získa ACL pre danú mailovú schránku
+ </simpara></listitem>
+ <listitem><simpara>
+ <function>ldap_sasl_bind</function> - Zvia¾e do LDAP adresára pomcou SASL
+ </simpara></listitem>
+ <listitem><simpara>
+ <function>mb_list_encodings</function> - Vracia pole v¹etkých podporovaných
+ kódovaní
+ </simpara></listitem>
+ <listitem><simpara>
+ <function>pcntl_getpriority</function> - Získa prioritu hocakého
+ procesu
+ </simpara></listitem>
+ <listitem><simpara>
+ <function>pcntl_wait</function> - Èaká na alebo vracia status rozvetveného
+ childu ako bolo definované systémovým volaním waitpid()
+ </simpara></listitem>
+ <listitem><simpara>
+ <function>pg_version</function> - Vracia pole s verziou klienta, protokolu
+ a servera (ak dostupné)
+ </simpara></listitem>
+ <listitem><simpara>
+ <function>php_check_syntax</function> - Kontroluje syntax urèeného
+ súboru
+ </simpara></listitem>
+ <listitem><simpara>
+ <function>php_strip_whitespace</function> - Vracia zdroj s odstranenými
+ komentármi a prázdnymi znakmi
+ </simpara></listitem>
+ <listitem><simpara>
+ <function>proc_nice</function> - Zmení prioritu aktuálneho procesu
+ </simpara></listitem>
+ <listitem><simpara>
+ <function>pspell_config_data_dir</function> - Zmení umiestnenie dátových
+ súborov jazkyka
+ </simpara></listitem>
+ <listitem><simpara>
+ <function>pspell_config_dict_dir</function> - Zmení umiestnenie hlavného
+ zoznamu slov
+ </simpara></listitem>
+ <listitem><simpara>
+ <function>setrawcookie</function> - Po¹le cookie bez ¾iadneho url kódovania
+ hodnoty
+ </simpara></listitem>
+ <listitem><simpara>
+ <function>snmp_read_mib</function> - Èíta a analyzuje MIB súbor do
+ aktívneho MIB stromu
+ </simpara></listitem>
+ <listitem><simpara>
+ <function>sqlite_fetch_column_types</function> - Vracia pole typov
+ ståpcov z osobitnej tabuµky
+ </simpara></listitem>
+ <listitem><simpara>
+ <function>str_split</function> - Konvertuje re»azec na pole
+ </simpara></listitem>
+ <listitem><simpara>
+ <function>strpbrk</function> - Hµadá v re»azci akúkoµvek sadu
+ znakov
+ </simpara></listitem>
+ <listitem><simpara>
+ <function>substr_compare</function> - Binary bezpeèné voliteµné case
+ nesenzitívne porovnanie dvoch re»azcov z offsetu, a¾ po då¾ku
+ znakov
+ </simpara></listitem>
+ <listitem><simpara>
+ <function>time_nanosleep</function> - Spánok na poèet sekúnd a
+ nano sekúnd
+ </simpara></listitem>
+ </itemizedlist>
+ <note>
+ <para>
+ Roz¹írenie <link linkend="ref.tidy">Tidy</link> tie¾ kompletne zmenilo
+ svoje API.
+ </para>
+ </note>
+ </section>
+
+
+ <section id="migration5.newconf">
+ <title>Nové Direktívy</title>
+ <para>
+ V PHP 5 boli predstavené nové &php.ini; direktívy. Tu je ich
+ zoznam:
+ </para>
+ <itemizedlist>
+ <listitem><simpara>
+ mail.force_extra_parameters - Zabezpeèí, aby sa pridanie urèených
+ parametrov poslalo ako extra parametre bináru sendmail. Tieto
+ parametre v¾dy nahradia hodnotu piateho parametra do
+ <function>mail</function>, dokonca aj v safe móde
+ </simpara></listitem>
+ <listitem><simpara>
+ <link linkend="ini.register-long-arrays">register_long_arrays</link> -
+ umo¾ní/neumo¾ní PHP registrova» odmietané dlhé $HTTP_*_VARS
+ </simpara></listitem>
+ <listitem><simpara>
+ <link linkend="ini.session.hash-function">session.hash_function</link> -
+ oznaèí hash funkciu (MD5 alebo SHA-1)
+ </simpara></listitem>
+ <listitem><simpara>
+ <link
+ linkend="ini.session.hash-bits-per-character">session.hash_bits_per_character</link>
+ - definuje koµko bitov sa ulo¾í v ka¾dom znaku pri konverzii binárnych
+ hash dát na nieèo èitateµné (od 4 do 6)
+ </simpara></listitem>
+ <listitem><simpara>
+ zend.ze1_compatibility_mode - Povolí mód kompatibility so Zend Engine 1 (PHP 4)
+ </simpara></listitem>
+ </itemizedlist>
+ </section>
+
+ <section id="migration5.databases">
+ <title>Databázy</title>
+ <para>
+ V PHP 5 sa urobilo niekoµko zmien vrátane databáz (MySQL a SQLite).
+ </para>
+ <para>
+ V PHP 5 nie sú klientské kni¾nice MySQL pribalené, kvôli licenèným
+ problémom a niektorých iných. Viac informácii zisíkate èítaním <link
+ linkend="faq.databases.mysql.php5">FAQ pol¾ky</link>.
+ </para>
+ <para>
+ Tie¾ existuje nové roz¹írenie, <link linkend="ref.mysqli">MySQLi (Improved
+ MySQL)</link>, ktoré je dizajnované na prácu s MySQL 4.1 a vy¹¹ie.
+ </para>
+ <para>
+ Od PHP 5, roz¹írenie <link linkend="ref.sqlite">SQLite</link> je v PHP
+ zabudované. SQLite je vnoriteµný SQL databázový engine a nie je pou¾itý
+ klinetskou kni¾nicou na pripojenie na veµký databázový server (ako MySQL
+ alebo PostgreSQL). Kni¾nica SQLite èíta a zapisuje priamo do a z
+ databázových súborov na disku.
+ </para>
+ </section>
+
+
+ <section id='migration5.oop'>
+ <title>Nový Model Objektov</title>
+ <para>
+ V PHP 5 je nový Model Objektov. Zaobchádzanie s objektami v PHP bolo
+ kompletne prepísané, umo¾òujúc tak lep¹í výkon a viac vlastností.
+ V predo¹lej verzii PHP boli objekty chápané ako primitívne typy
+ (napr. integere a stringy). Nevýhodou tejto metódy bolo, ¾e sa celý
+ objekt sémanticky skopíroval pri priradení premennej alebo sa metóde
+ poslala ako parameter. Po novom sú objekty odkazované cez handle a
+ nie hodnotu (handle si mô¾ete predstavi» ako idetifikátor
+ objektu).
+ </para>
+ <para>
+ Mnoho PHP programátorv sa neobáva problému kopírovania starého modelu
+ objektov, a preto väè¹ina PHP aplikácii bude fungova» mimo poèítaèa
+ alebo len s málo modifikáciami.
+ </para>
+
+ <section id='migration.oop.members'>
+ <title>Èlenovia Private a Protected</title>
+ <para>
+ PHP 5 predstavuje èlenské premenné private a protected, umo¾òujú vám
+ definova» viditeµnos» vlastností triedy.
+ </para>
+ <example>
+ <title>Prístupnos» èlenov Private a Protected</title>
+ <simpara>
+ K èlenskym premenným Protected sa dá pristupova» v triede roz¹irujúcej
+ triedy, v ktorej sú deklarované, kde¾to k èlenským premenným Private
+ sa dá pristupova» iba cez triedu, ktorej patria.
+ </simpara>
+ <programlisting role="php">
+<![CDATA[
+<?php
+class MyClass {
+ private $Hello = "Hello, World!\n";
+ protected $Bar = "Hello, Foo!\n";
+ protected $Foo = "Hello, Bar!\n";
+
+ function printHello() {
+ print "MyClass::printHello() " . $this->Hello;
+ print "MyClass::printHello() " . $this->Bar;
+ print "MyClass::printHello() " . $this->Foo;
+ }
+}
+
+class MyClass2 extends MyClass {
+ protected $Foo;
+
+ function printHello() {
+ MyClass::printHello(); /* Malo by vypisat */
+ print "MyClass2::printHello() " . $this->Hello; /* Nemalo by vypisat nic */
+ print "MyClass2::printHello() " . $this->Bar; /* Nemalo by vypisat (nedeklarovane)*/
+ print "MyClass2::printHello() " . $this->Foo; /* Malo by vypisat */
+ }
+}
+
+$obj = new MyClass();
+print $obj->Hello; /* Nemalo by vypisat nic */
+print $obj->Bar; /* Nemalo by vypisat nic */
+print $obj->Foo; /* Nemalo by vypisat nic */
+$obj->printHello(); /* Malo by vypisat */
+
+$obj = new MyClass2();
+print $obj->Hello; /* Nemalo by vypisat nic */
+print $obj->Bar; /* Nemalo by vypisat nic */
+print $obj->Foo; /* Nemalo by vypisat nic */
+$obj->printHello();
+?>
+]]>
+ </programlisting>
+ </example>
+ </section>
+
+ <section id='migration.oop.methods'>
+ <title>Metódy Private a Protected</title>
+ <para>
+ Spolu s PHP 5 boli predstavené aj metódy private a protected.
+ </para>
+ <example>
+ <title>Príklad metódy Protected</title>
+ <programlisting role="php">
+<![CDATA[
+<?php
+class Foo {
+ private function aPrivateMethod() {
+ echo "Foo::aPrivateMethod() called.\n";
+ }
+
+ protected function aProtectedMethod() {
+ echo "Foo::aProtectedMethod() called.\n";
+ $this->aPrivateMethod();
+ }
+}
+
+class Bar extends Foo {
+ public function aPublicMethod() {
+ echo "Bar::aPublicMethod() called.\n";
+ $this->aProtectedMethod();
+ }
+}
+
+$o = new Bar;
+$o->aPublicMethod();
+?>
+]]>
+ </programlisting>
+ </example>
+ <simpara>
+ Starý kód, ktorý nemal ¾iadne u¾ívateµom definované triedy alebo funkcie nazvané
+ "public", "protected" alebo "private" by mal be¾a»
+ bez modifikácii.
+ </simpara>
+ </section>
+
+ <section id='migration.oop.abstract'>
+ <title>Triedy a Metódy Abstract</title>
+ <para>
+ PHP 5 tie¾ predstavuje triedy a metódy abstract. Metóda abstract deklaruje
+ iba signatúru metódy a neposkytuje implementáciu.
+ Trieda, ktorá obsahuje metódy abstract musí by» deklarovaná ako
+ abstract.
+ </para>
+ <example>
+ <title>Príklad triedy Abstract</title>
+ <programlisting role="php">
+<![CDATA[
+<?php
+abstract class AbstractClass {
+ abstract public function test();
+}
+
+class ImplementedClass extends AbstractClass {
+ public function test() {
+ echo "ImplementedClass::test() volana.\n";
+ }
+}
+
+$o = new ImplementedClass;
+$o->test();
+?>
+]]>
+ </programlisting>
+ </example>
+ <simpara>
+ Triedy Abstract nemô¾u by» in¹tanciované. Starý kód, ktorý nemá ¾iadne
+ u¾ívateµom definované triedy alebo funkcie nazvané 'abstract' by mal
+ be¾a» bez modifikácii.
+ </simpara>
+ </section>
+
+ <section id='migration.oop.interfaces'>
+ <title>Rozhrania</title>
+ <para>
+ PHP 5 predstavuje rozhrania. Trieda mô¾e implementova» µubovoµný zoznam
+ rozhraní.
+ </para>
+ <example>
+ <title>Príklad rozhrania</title>
+ <programlisting role="php">
+<![CDATA[
+<?php
+interface Throwable {
+ public function getMessage();
+}
+
+class MyException implements Throwable {
+ public function getMessage() {
+ // ...
+ }
+}
+?>
+]]>
+ </programlisting>
+ </example>
+ <simpara>
+ Starý kód, ktorý nemá ¾iadne u¾ívateµom definované triedy alebo funkcie nazvané
+ 'interface'alebo 'implements' by mal be¾a» bez modifikácii.
+ </simpara>
+ </section>
+
+ <section id='migration.oop.typehints'>
+ <title>Typové Hinty triedy</title>
+ <para>
+ PHP 5, stále voµne typové, predstavuje schopnos» pou¾i» Typové hinty triedy
+ na deklarovanie oèakávanej triedy objektov, ktoré sú poslané metóde
+ ako parametre.
+ </para>
+ <example>
+ <title>Príklad Typového hintu triedy</title>
+ <programlisting role="php">
+<![CDATA[
+<?php
+interface Foo {
+ function a(Foo $foo);
+}
+
+interface Bar {
+ function b(Bar $bar);
+}
+
+class FooBar implements Foo, Bar {
+ function a(Foo $foo) {
+ // ...
+ }
+
+ function b(Bar $bar) {
+ // ...
+ }
+}
+
+$a = new FooBar;
+$b = new FooBar;
+
+$a->a($b);
+$a->b($b);
+?>
+]]>
+ </programlisting>
+ </example>
+ <simpara>
+ Teto typové hinty triedy sa nekontrolujú poèas kompilácie, ako by to bolo
+ v prípade typových jazykov, ale poèas runtime. To znamená, ¾e:
+ </simpara>
+ <informalexample>
+ <programlisting role="php">
+<![CDATA[
+<?php
+function foo(ClassName $object) {
+ // ...
+}
+?>
+]]>
+ </programlisting>
+ </informalexample>
+ <simpara>je zhodné s:</simpara>
+ <informalexample>
+ <programlisting role="php">
+<![CDATA[
+<?php
+function foo($object) {
+ if (!($object instanceof ClassName)) {
+ die("Argument 1 musi byt instanciou ClassName");
+ }
+}
+?>
+]]>
+ </programlisting>
+ </informalexample>
+ </section>
+
+ <section id='migration5.oop.final'>
+ <title>final</title>
+ <para>
+ PHP 5 predstavuje kµúèové slovo "final" na deklarovanie èlenov a metód
+ final. Metódy a èlenovia deklarovavý ako final sa nemô¾u pre»a¾i»
+ sub-triedami.
+ </para>
+ <example>
+ <title>Metóda final</title>
+ <programlisting role="php">
+<![CDATA[
+<?php
+class Foo {
+ final function bar() {
+ // ...
+ }
+}
+?>
+]]>
+ </programlisting>
+ </example>
+ <para>
+ Ba èo viac, je mo¾né vytvori» triedy final. Toto zabraòuje triede by»
+ ¹pecializovanou (nemô¾e by» zdedená inou triedou). Nie je nutné
+ samotné metódy triedy final deklarova» ako final.
+ </para>
+ <example>
+ <title>trieda final</title>
+ <programlisting role="php">
+<![CDATA[
+<?php
+final class Foo {
+ // definicia triedy
+}
+
+// nasledujuci riadok nie je mozny
+// class Bork extends Foo {}
+?>
+]]>
+ </programlisting>
+ </example>
+ <para>
+ Vlastnosti nemô¾u by» final-ne.
+ </para>
+ <para>
+ Starý kód, ktorý nemal ¾iadne u¾ívateµom definované triedy alebo funkcie nazvané
+ 'final' by mal be¾a» bez modifikácii.
+ </para>
+ </section>
+
+ <section id='migration5.oop.cloning'>
+ <title>Klonovanie objektov</title>
+ <para>
+ PHP 4 neponúkalo ¾iadny spôsob, akým by u¾ívateµ mohol rozhodnú», ktorý
+ kopírovací con¹truktor spusti» pri zdvojení objketu. Poèas duplikácie,
+ PHP 4 kopírovalo bit po bite tvoriac tak identickú repliku v¹etkých
+ vlastností objektu.
+ </para>
+ <para>
+ Tvorba kópie objektu s plne replikovaými vlastnos»ami nie je v¾dy
+ ¾iadaným správaním. Dobrým príkladom potreby kopírovaích kon¹truktorov
+ je, ak máte objekt, ktorý reprezentuje GTK okno a objekt dr¾í zdroj
+ tohto GTK okna, keï vytvárate duplikát, mô¾ete chcie» vytvori» nové
+ okno s rovnakými vlastnos»ami a ma» nový objekt, ktorý dr¾í zdroj
+ nového okna. Ïal¹ím príkladom je, ak vá¹ objekt dr¾í odkaz na ïal¹í
+ objekt, ktorý on pou¾íva a keï replikujete rodièovský objekt, chcete
+ vytvori» novú in¹tanciu tohto druhého objektu, tak¾e replika má svoju
+ vlastnú oddelenú kópiu.
+ </para>
+ <para>
+ Kópia objektu je vytvorená pomocou kµúèového slova clone (ktoré volá, ak je
+ to mo¾né, metódu <function>__clone</function> objektu). Metóda
+ <function>__clone</function> objetku sa nedá vola» priamo.
+ </para>
+ <para>
+ Keï developer ¾iada vytvorenie novej kópiu objektu, PHP 5 skontroluje, èi
+ bola metóda <function>__clone</function> definovaná alebo nie. Ak nie,
+ zavolá východziu __clone(), ktorá skopíruje v¹etky vlastnosti objektu.
+ Ak bola metóda <function>__clone</function> definované, potom bude
+ zodpovedná za nastavenie nutných vlastností vo vytvorenom objekte.
+ Engine vhodne dodá funkciu, ktorá importuje v¹etky vlastnosti zo zdrojového
+ objektu, tak¾e mô¾u zaèa» s by-value replikou zdrojového objektu a
+ prelomi» vlastnosti, ktoré sa musia zmeni».
+ </para>
+ <example>
+ <title>Klonovanie objektov</title>
+ <programlisting role="php">
+<![CDATA[
+<?php
+class MyCloneable {
+ static $id = 0;
+
+ function MyCloneable() {
+ $this->id = self::$id++;
+ }
+
+ function __clone() {
+ $this->address = "New York";
+ $this->id = self::$id++;
+ }
+}
+
+$obj = new MyCloneable();
+
+$obj->name = "Hello";
+$obj->address = "Tel-Aviv";
+
+print $obj->id . "\n";
+
+$obj_cloned = clone $obj;
+
+print $obj_cloned->id . "\n";
+print $obj_cloned->name . "\n";
+print $obj_cloned->address . "\n";
+?>
+]]>
+ </programlisting>
+ </example>
+ </section>
+
+ <section id='migration5.oop.constructors'>
+ <title>Kon¹truktory</title>
+ <para>
+ PHP 5 umo¾òuje developerom deklarova» metódy kon¹truktora pre triedy.
+ Triedy, ktoré majú metódu kon¹truktora, volajú túto metódu pri ka¾dom
+ novo-vytvorenom objekte, tak¾e je vhodná pre akúkoµvek incializáciu, ktorú
+ objekt mô¾e potrebova» pred tým, ne¾ je je pou¾itý.
+ </para>
+ <para>
+ V PHP 4 metódy kon¹truktora boli metódy triedy, ktoré mali rovnaký názov ako
+ trieda samotná. Nakoµko je veµmi be¾né vola» rodièovský kon¹truktor
+ z odvodených tried, spôsob, ako PHP 4 fungovalo, bol tro¹ka krkolomý na presúvanie
+ tried vo veµkej hierarchii tried. Ak sa trieda presunula pod iného rodièa,
+ názov kon¹truktora toho rodièa sa zmení tie¾ a kód v odvodenej triede,
+ ktorá volá rodièovského kon¹truktora, sa tie¾ zmenil.
+ </para>
+ <para>
+ PHP 5 predstavuje ¹tandardný spôsob deklarovania metód kon¹truktora ich
+ volaním pomocou názvu <function>__construct</function>.
+ </para>
+ <example>
+ <title>Pou¾ívanie novo unifikovaných kon¹truktorov</title>
+ <programlisting role="php">
+<![CDATA[
+<?php
+class BaseClass {
+ function __construct() {
+ print "Konstruktor v BaseClass\n";
+ }
+}
+
+class SubClass extends BaseClass {
+ function __construct() {
+ parent::__construct();
+ print "Konstruktor v SubClass\n";
+ }
+}
+
+$obj = new BaseClass();
+$obj = new SubClass();
+?>
+]]>
+ </programlisting>
+ </example>
+ <para>
+ Kvôli spätnej kompatibilite, ak PHP 5 nedokáte nájs» funkciu
+ <function>__construct</function> pre danú triedu, vyhµadá funkciu
+ kon¹truktora starého ¹týlu, podµa názvu triedy. Z hµadiska efektivity
+ to znamená, ¾e jediný prípad, ktorý by mal problémy kompatibility je,
+ ak trieda nemala metódu nazvanú
+ <function>__construct</function>, èo bolo pou¾ité pre odli¹nú sémantiku.
+ </para>
+ </section>
+
+ <section id='migration5.oop.destructors'>
+ <title>De¹truktory</title>
+ <para>
+ Ma» schopnos» definova» de¹truktory pre objekty mô¾e by» veµmi u¾itoèné.
+ De¹truktory doká¾u sledova» správy pre ladenie, zatvára» databázové spojenia
+ a robi» iné èistiace práce. V PHP 4 neexistoval ¾iadny mechanizmus pre de¹truktory
+ objektov, i keï PHP u¾ malo podporu pre registrovanie funkcii, ktoré sa malo spusti»
+ pri po¾adovanom vypnutí.
+ </para>
+ <para>
+ PHP 5 predstavuje koncept de¹truktorov podobný tomu v iných objektovo
+ orientovaných jazykoch, ako je Java: Ak sa znièí posledný odkaz na
+ objekt, zavolá sa de¹truktor objektu, ktorý je metódou triedy nazvanou
+ <function>__destruct</function>, ktorá neprijíma ¾iadne parametre,
+ pred tým, ne¾ sa objekt uvoµní z pamäte.
+ </para>
+ <example>
+ <title>Destructor</title>
+ <programlisting role="php">
+<![CDATA[
+<?php
+class MyDestructableClass {
+ function __construct() {
+ print "V konstruktore\n";
+ $this->name = "MyDestructableClass";
+ }
+
+ function __destruct() {
+ print "Destrukcia " . $this->name . "\n";
+ }
+}
+
+$obj = new MyDestructableClass();
+?>
+]]>
+ </programlisting>
+ </example>
+ <para>
+ Podobne ako kon¹truktory, rodièovské de¹truktory nebudú volané implicitne
+ engine-om. Aby sa pustil rodièovský de¹truktor, musí sa explicitne zavola»
+ <function>parent::__destruct</function> v tele de¹truktora.
+ </para>
+ </section>
+
+ <section id='migration5.oop.constants'>
+ <title>Kon¹tanty</title>
+ <para>
+ PHP 5 predstavujes triedne kon¹tanty:
+ </para>
+ <example>
+ <title>Príklad kon¹tanty triedy</title>
+ <programlisting role="php">
+<![CDATA[
+<?php
+class Foo {
+ const constant = "constant";
+}
+
+echo "Foo::constant = " . Foo::constant . "\n";
+?>
+]]>
+ </programlisting>
+ </example>
+ <simpara>
+ Starý kód, ktorý nemá ¾iadne u¾ívateµom definované triedy alebo fukcie nazvané 'const'
+ bude be¾a» bez modifikácii.
+ </simpara>
+ </section>
+
+ <section id='migration5.oop.exceptions'>
+ <title>Výnimky</title>
+ <para>
+ PHP 4 nemalo ¾iadne riadenie výnimiek. PHP 5 predstavuje model výnimiek
+ podobný tomu v iných programovacích jazykoch. Pozor na fakt, ¾e existuje
+ podpora pre "catch all", ale nie pre klazulu "finally".
+ </para>
+ <para>
+ Výnimky sa dajú viackrát thrown-ú» v catch blokoch. Tie¾ je mo¾né ma»
+ viacnásobné catch bloky. V takom prípade sa zachytená výnimka porovná s
+ typom triedy ka¾dého catch bloku od hora na dol a prvý blok, ktorý sa
+ zhoduje s 'instanceof', sa spracuje. Keï sa catch blok ukonèí, spracovanie
+ pokraèuje na konci posledného catch bloku. Ak sa ¾iadny catch blok
+ nezhoduje s 'instanceof', potom sa hµadá ïal¹í try/catch blok a¾
+ pokiaµ ïal¹ie try/catch bloky nie sú dostupné. V takom prípade
+ je výnimka nezachytenou výnimkou a program sa ukonèí zobrazením
+ výnimky.
+ </para>
+ <example>
+ <title>Príklad tvorby výnimky</title>
+ <programlisting role="php">
+<![CDATA[
+<?php
+try {
+ throw new Exception('Ahoj');
+}
+catch (Exception $exception) {
+ echo $exception;
+}
+?>
+]]>
+ </programlisting>
+ </example>
+ <simpara>
+ Starý kód, ktorý nemá ¾iadne u¾ívateµom definované triedy alebo funkcie 'catch',
+ 'throw' a 'try' bude be¾a» bez modifikácii.
+ </simpara>
+ </section>
+
+ <section id='migration5.oop.dereferencing'>
+ <title>Dereferencovanie objektov vratených z funkcií</title>
+ <para>
+ V PHP 4 nebolo mo¾né dereferencova» objekty vrátené funkciami a urobi»
+ ïal¹ie volania metódy na tieto objekty. S PHP 5 je mo¾né následujúce:
+ </para>
+ <example>
+ <title>Príklad dereferencie</title>
+ <programlisting role="php">
+<![CDATA[
+<?php
+class Circle {
+ function draw() {
+ print "Kruh\n";
+ }
+}
+
+class Square {
+ function draw() {
+ print "Stvorec\n";
+ }
+}
+
+function ShapeFactoryMethod($shape) {
+ switch ($shape) {
+ case "Circle":
+ return new Circle();
+ case "Square":
+ return new Square();
+ }
+}
+
+ShapeFactoryMethod("Circle")->draw();
+ShapeFactoryMethod("Square")->draw();
+?>
+]]>
+ </programlisting>
+ </example>
+ </section>
+
+ <section id='migration5.oop.staticinit'>
+ <title>Inicializácia premenných statických èlenov</title>
+ <para>
+ Premenné statických èlenov statických tried sa mô¾u teraz inicializova».
+ </para>
+ <example>
+ <title>Príklad inicializácie premennej Static</title>
+ <programlisting role="php">
+<![CDATA[
+<?php
+class foo {
+ static $my_static = 5;
+ public $my_prop = 'bla';
+}
+
+print foo::$my_static;
+$obj = new foo;
+print $obj->my_prop;
+?>
+]]>
+ </programlisting>
+ </example>
+ </section>
+
+ <section id='migration5.oop.staticmethods'>
+ <title>Metódy Static</title>
+ <para>
+ PHP 5 predstavuje kµúèové slovo 'static' na deklaráciu statický metód,
+ teda volateµných mimo kontextu objektu.
+ </para>
+ <example>
+ <title>Príklad metód Static</title>
+ <programlisting role="php">
+<![CDATA[
+<?php
+class Foo {
+ public static function aStaticMethod() {
+ // ...
+ }
+}
+
+Foo::aStaticMethod();
+?>
+]]>
+ </programlisting>
+ </example>
+ <para>
+ Pseudo premenná $this nie je dostupná vo vnútri metódy, ktorá bola
+ deklarovaná ako static.
+ </para>
+ </section>
+
+ <section id='migration5.oop.instanceof'>
+ <title>instanceof</title>
+ <para>
+ PHP 5 predstavuje kµúèové slovo <literal>instanceof</literal>, ktoré
+ vám umo¾òuje zisti», èi objekt je alebo nie je in¹tanciou triedy,
+ alebo èi roz¹iruje triedu alebo implementuje rozhranie.
+ </para>
+ <example>
+ <title>Príklad <literal>instanceof</literal></title>
+ <programlisting role="php">
+<![CDATA[
+<?php
+class baseClass { }
+
+$a = new baseClass;
+
+if ($a instanceof baseClass) {
+ echo "Hello World";
+}
+?>
+]]>
+ </programlisting>
+ </example>
+ </section>
+
+ <section id='migration5.oop.staticvars'>
+ <title>Static function variables</title>
+ <para>
+ Static-y sa teraz spracovávajú poèas kompilácie, èo developer umo¾òuje
+ priradi» premenné k static-om pomocou referencie. Táto zmena veµkolepo
+ zlep¹uje ich výkon, ale znamená, ¾e nepriame odkazy na static-y
+ nebude viac fungova».
+ </para>
+ </section>
+
+ <section id='migration5.oop.refparams'>
+ <title>Parametre poslané referenciou</title>
+ <para>
+ Parametre, ktoré sú poslané referenciou funkcii mô¾u teraz ma»
+ východzie hodnoty
+ </para>
+ <example>
+ <title />
+ <programlisting role="php">
+<![CDATA[
+<?php
+function my_function(&$var = null) {
+ if ($var === null) {
+ die("$var musí mat hodnotu");
+ }
+}
+?>
+]]>
+ </programlisting>
+ </example>
+ </section>
+
+ <section id='migration5.oop.autoload'>
+ <title><function>__autoload</function></title>
+ <para>
+ Zachytávacia funkcia <function>__autoload</function> bude automaticky
+ volaná, keï sa má nedeklarovaná trieda in¹tanciova». Názov tejto triedy
+ sa po¹le zachytávacej funkcii <function>__autoload</function>
+ ako jej jediný argument.
+ </para>
+ <example>
+ <title>Príklad <function>__autoload</function></title>
+ <programlisting role="php">
+<![CDATA[
+<?php
+function __autoload($className) {
+ include_once $className . ".php";
+}
+
+$object = new ClassName;
+?>
+]]>
+ </programlisting>
+ </example>
+ </section>
+
+ <section id='migration5.oop.overload'>
+ <title>Pre»a¾iteµné volania metód a prístupy vlastností</title>
+ <para>
+ Obe, volania metód a prístupy vlastností sa dajú pre»a¾i» cez metódy
+ <function>__call</function>, <function>__get</function> a
+ <function>__set</function>.
+ </para>
+ <example>
+ <title>
+ <function>__get</function> a
+ <function>__set</function>
+ </title>
+ <programlisting role="php">
+<![CDATA[
+<?php
+class Setter {
+ public $n;
+ public $x = array("a" => 1, "b" => 2, "c" => 3);
+
+ function __get($nm) {
+ print "Ziskanie [$nm]\n";
+
+ if (isset($this->x[$nm])) {
+ $r = $this->x[$nm];
+ print "Vratenie: $r\n";
+ return $r;
+ } else {
+ print "Nic!\n";
+ }
+ }
+
+ function __set($nm, $val) {
+ print "Nastanie [$nm] na $val\n";
+
+ if (isset($this->x[$nm])) {
+ $this->x[$nm] = $val;
+ print "OK!\n";
+ } else {
+ print "Nie OK!\n";
+ }
+ }
+}
+
+
+$foo = new Setter();
+$foo->n = 1;
+$foo->a = 100;
+$foo->a++;
+$foo->z++;
+var_dump($foo);
+?>
+]]>
+ </programlisting>
+ </example>
+ <example>
+ <title>Príklad <function>__get</function></title>
+ <programlisting role="php">
+<![CDATA[
+<?php
+class Caller {
+ private $x = array(1, 2, 3);
+
+ function __call($m, $a) {
+ print "Metoda $m volala:\n";
+ var_dump($a);
+ return $this->x;
+ }
+}
+
+$foo = new Caller();
+$a = $foo->test(1, "2", 3.4, true);
+var_dump($a);
+?>
+]]>
+ </programlisting>
+ </example>
+ </section>
+
+ <section id='migration5.oop.iteration'>
+ <title>Iterácia</title>
+ <para>
+ Objekty sa mô¾u iterova» spôsobom pre»a¾enia, pri pou¾ití s foreach. Východzie
+ správanie je iterova» cez v¹etky vlastnosti.
+ </para>
+ <example>
+ <title>Príklad iterácie objektu</title>
+ <programlisting role="php">
+<![CDATA[
+<?php
+class Foo {
+ public $x = 1;
+ public $y = 2;
+}
+
+$obj = new Foo;
+
+foreach ($obj as $prp_name => $prop_value) {
+ // pomocou vlastnosti
+}
+?>
+]]>
+ </programlisting>
+ </example>
+ <para>
+ Ka¾dá trieda, ktorej in¹tancie sa dajú iterova» s foreach by mala implementova»
+ prázdne rozhranie <literal>Traversable</literal>. Teda ka¾dý objekt, ktorý
+ hovorí, ¾e implementuje <literal>Traversable</literal> sa mô¾e pou¾i» s foreach.
+ </para>
+ <para>
+ Rozhrania <literal>IteratorAggregate</literal> a <literal>Iterator</literal>
+ vám umo¾òujú urèi» ako sa objekty triedy iterujú v PHP kóde. Prvý z nich
+ má metódu <function>getIterator</function>, ktorá musí vráti»
+ pole alebo objekt, ktorý buï implementuje rozhranie
+ <literal>Iterator</literal> alebo je in¹taniciovaný z internej
+ triedy, ktorá mô¾e by» iterovaná
+ </para>
+ <example>
+ <title>Príklad tvorby Iterátora</title>
+ <programlisting role="php">
+<![CDATA[
+<?php
+class ObjectIterator implements Iterator {
+
+ private $obj;
+ private $num;
+
+ function __construct($obj) {
+ $this->obj = $obj;
+ }
+ function rewind() {
+ $this->num = 0;
+ }
+ function valid() {
+ return $this->num < $this->obj->max;
+ }
+ function key() {
+ return $this->num;
+ }
+ function current() {
+ switch($this->num) {
+ case 0: return "1.";
+ case 1: return "2.";
+ case 2: return "3.";
+ default: return $this->num.".";
+ }
+ }
+ function next() {
+ $this->num++;
+ }
+}
+
+class Object implements IteratorAggregate {
+
+ public $max = 3;
+
+ function getIterator() {
+ return new ObjectIterator($this);
+ }
+}
+
+$obj = new Object;
+
+// tento foreach ...
+foreach($obj as $key => $val) {
+ echo "$key = $val\n";
+}
+
+// sa zhoduje s nasledujucimi 7 riadkami s direktivou for.
+$it = $obj->getIterator();
+for($it->rewind(); $it->valid(); $it->next()) {
+ $key = $it->current();
+ $val = $it->key();
+ echo "$key = $val\n";
+}
+unset($it);
+?>
+]]>
+ </programlisting>
+ </example>
+ </section>
+
+ <section id='migrating5.oop.methodconst'>
+ <title>Kon¹tanta <literal>__METHOD__</literal></title>
+ <para>
+ Nová pseudo kon¹tanta <literal>__METHOD__</literal> ukazuje aktuálnu
+ triedu a metódu, keï sa pou¾ije vo vnútri metódy a funkciu, keï sa pou¾ije
+ mimo triedu.
+ </para>
+ <example>
+ <title>Príklad pou¾itia <literal>__METHOD__</literal></title>
+ <programlisting role="php">
+<![CDATA[
+<?php
+class Foo {
+ function show() {
+ echo __METHOD__;
+ }
+}
+
+class Bar extends Foo {
+}
+
+Foo::show(); // posiela na vystup Foo::show
+Bar::show(); // posiela na vystup Foo::show pretoze __METHOD__ je
+ // token vyhodnoteny pocas kompilacie
+
+function test() {
+ echo __METHOD__;
+}
+
+test(); // posiela na vystup test
+?>
+]]>
+ </programlisting>
+ </example>
+ </section>
+
+ <section id='migrating5.oop.tostring'>
+ <title>Metóda <function>__toString</function></title>
+ <para>
+ Nová zázraèná metóda <function>__toString</function> vám umo¾òuje
+ pre»a¾i» objekt na konverziu re»azca.
+ </para>
+ <example>
+ <title>Príklad <function>__toString</function></title>
+ <programlisting role="php">
+<![CDATA[
+<?php
+class Foo {
+ function __toString() {
+ return "Cokolvek";
+ }
+}
+
+$obj = new Foo;
+
+echo $obj; // volaj __toString()
+?>
+]]>
+ </programlisting>
+ </example>
+ </section>
+
+ <section id='migrating5.oop.reflection'>
+ <title>Reflexné API</title>
+ <para>
+ PHP 5 prichádza s kompletnou API reflexiou, ktorá pridáva schopnos»
+ tvorbu-opanèných tried, rozhraní, funkcíí a metód ronvako ako
+ roz¹írení.
+ </para>
+ <para>
+ Reflexné API tie¾ ponúkajú získanie doc komentárov pre funkcie,
+ triedy a metódy.
+ </para>
+ <para>
+ Takmer v¹etky aspekty objektovo orientovaného kódu sa dajú reflektova» pomocou
+ reflexného API, ktoré je
+ <ulink url="http://sitten-polizei.de/php/reflection_api/docs/language.reflection.html">
+ zdokumentované oddelene</ulink>.
+ </para>
+ <example>
+ <title>Príklad pou¾ita reflexného API</title>
+ <programlisting role="php">
+<![CDATA[
+<?php
+class Foo {
+ public $prop;
+ function Func($name) {
+ echo "Ahoj $name";
+ }
+}
+
+reflectionClass::export('Foo');
+reflectionObject::export(new Foo);
+reflectionMethod::export('Foo', 'func');
+reflectionProperty::export('Foo', 'prop');
+reflectionExtension::export('standard');
+?>
+]]>
+ </programlisting>
+ </example>
+ </section>
+
+ </section>
+
+ <section id='migrating5.errorrep'>
+ <title>Error Reporting</title>
+ <para>
+ Poèínajúc PHP 5 bol predstavená nová ko¹tanta hlásenia chýb E_STRICT s
+ hodnotou 2048. Umo¾òuje run-time PHP návrhy ohµadom interoperaènosti
+ a kompatibility vá¹ho kódu, èo vám pomô¾e dodr¾a» najnov¹ie
+ a najveµkolepej¹ie navrhované metódy kódovania. Napr. správa STRICT
+ vás bude varova» na pou¾itie odmietaných funkcií.
</para>
+ <note>
+ <simpara>
+ E_ALL nezahàòa E_STRICT, tak¾e defaultne nie je povolená
+ </simpara>
+ </note>
</section>
</appendix>