goba Mon Aug 20 12:29:57 2001 EDT
Modified files:
/phpdoc/hu Translators
/phpdoc/hu/functions outcontrol.xml
/phpdoc/hu/language oop.xml
Log:
Correcting one make error in outcontrol.xml
Adding the updated version of oop.xml, now it is actual
Index: phpdoc/hu/Translators
diff -u phpdoc/hu/Translators:1.51 phpdoc/hu/Translators:1.52
--- phpdoc/hu/Translators:1.51 Mon Aug 20 11:36:05 2001
+++ phpdoc/hu/Translators Mon Aug 20 12:29:56 2001
@@ -185,7 +185,7 @@
control-structures.xml Kontra Gergely 1.37
expressions.xml Kontra Gergely 1.13
functions.xml Kontra Gergely 1.16
-oop.xml Kontra Gergely 1.5 ++
+oop.xml Kontra Gergely 1.26
operators.xml Kontra Gergely 1.26
references.xml Hojtsy G�bor 1.15
types.xml Hojtsy G�bor 1.47
Index: phpdoc/hu/functions/outcontrol.xml
diff -u phpdoc/hu/functions/outcontrol.xml:1.3 phpdoc/hu/functions/outcontrol.xml:1.4
--- phpdoc/hu/functions/outcontrol.xml:1.3 Mon Aug 20 11:35:41 2001
+++ phpdoc/hu/functions/outcontrol.xml Mon Aug 20 12:29:56 2001
@@ -39,7 +39,7 @@
</para>
<para>
A fenti p�ld�ban az echo �ltal gener�lt sz�veg a pufferben
- v�rakozik mindaddig, am�g egy <function>ob_end_flush</function
+ v�rakozik mindaddig, am�g egy <function>ob_end_flush</function>
parancs nem �rkezik. Mindek�zben a <function>setcookie</function>
�ltal gener�lt fejl�csor minden hiba n�l�l elmegy a b�ng�sz�
fel� (ez am�gy lehetetlen volna, mivel az echo m�r a webszerver
Index: phpdoc/hu/language/oop.xml
diff -u phpdoc/hu/language/oop.xml:1.3 phpdoc/hu/language/oop.xml:1.4
--- phpdoc/hu/language/oop.xml:1.3 Sun Aug 19 10:21:30 2001
+++ phpdoc/hu/language/oop.xml Mon Aug 20 12:29:56 2001
@@ -13,18 +13,21 @@
<programlisting role="php">
<![CDATA[
<?php
-class Kosar {
+class Kosar
+{
var $dolgok; // A kos�rban lev� dolgok
// berak a kos�rba $db darabot az $sorsz index� dologb�l
- function berak ($sorsz, $db) {
+ function berak ($sorsz, $db)
+ {
$this->dolgok[$sorsz] += $db;
}
// kivesz a kos�rb�l $db darabot az $sorsz index� dologb�l
- function kivesz ($sorsz, $db) {
+ function kivesz ($sorsz, $db)
+ {
if ($this->items[$sorsz] > $db) {
$this->items[$sorsz] -= $db;
return true;
@@ -44,45 +47,182 @@
asszociat�v t�mbj�b�l �ll, �s defini�l 2 funkci�t hozz�, hogy
bele lehessen rakni, illetve kivenni a kos�rb�l.
</para>
- <note><simpara>
- PHP 4-ben csak konstans <literal>var</literal> inicializ�l�
- �rt�kek megengedettek. Haszn�ld a konstruktort nem konstans
- �rt�k� inicializ�l�shoz.
- </simpara></note>
+
+ <caution>
+ <simpara>
+ Az al�bbi figyelmeztet�sek a PHP 4-es verzi�j�ra �rv�nyesek.
+ </simpara>
+
+ <simpara>
+ Az <literal>stdClass</literal> n�v le van foglalva, mivel
+ bels�leg a Zend motor haszn�lja. Emiatt nem lehet egy
+ <literal>stdClass</literal> nev� oszt�lyod PHP-ben.
+ </simpara>
+
+ <simpara>
+ A <literal>__sleep</literal> �s <literal>__wakeup</literal>
+ nevek speci�lisak a PHP oszt�lyokban. Nem szabad ezeket
+ a neveket haszn�lni a met�dusokhoz, hacsak nem a hozz�juk
+ tartoz� speci�lis funkcionalit�st szeretn�d fel�l�rni. L�sd
+ az al�bbi r�szletes le�r�st.
+ </simpara>
+
+ <simpara>
+ A PHP fenntartja az �sszes __ karakterekkel kezd�d�
+ met�dusnevet, mint speci�lis neveket. Nem szabad
+ __ karakterekkel kezd�d� met�dusnevet adni, hacsak nem
+ a dokument�lt funkci�kat szeretn�d haszn�lni.
+ </simpara>
+ </caution>
+
+ <note>
+ <simpara>
+ PHP 4-ben csak �lland� �rt�k� <literal>var</literal>
+ inicializ�l� �rt�kek megengedettek. Ha nem �lland�
+ �rt�ket szeretn�l be�ll�tani, �rnod kell egy
+ inicializ�l� met�dust, ami automatikusan megh�v�dik,
+ amikor egy objektump�ld�ny l�trej�n az oszt�lyb�l.
+ Az ilyen met�dusokat h�vjuk konstruktoroknak (l�sd
+ lentebb).
+ </simpara>
+ <informalexample>
+ <programlisting role="php">
+<![CDATA[
+/* Egyik al�bbi �rt�kad�s sem m�k�dik PHP 4-ben */
+class Kosar
+{
+ var $mai_datum = date("Y. m. d.");
+ var $nev = $csaladi_nev;
+ var $tulajdonos = 'Ferenc ' . 'J�nos';
+ var $termekek = array("Vide�", "TV");
+}
+
+/* �gy kell a fenti be�ll�t�sokat el�rni */
+class Kosar
+{
+ var $mai_datum;
+ var $nev;
+ var $tulajdonos;
+ var $termekek;
+
+ function Kosar()
+ {
+ $this->mai_nap = date("Y. m. d.");
+ $this->nev = $GLOBALS['csaladi_nev'];
+ /* stb. . . */
+ }
+}
+]]>
+ </programlisting>
+ </informalexample>
+ </note>
+
+
<para>
Az oszt�lyok t�pusok, vagyis az aktu�lis v�ltoz�k tervrajzai.
- A k�v�nt t�pus� v�ltoz�t a new oper�torral hozhatod l�tre.
+ A k�v�nt t�pus� v�ltoz�t a <literal>new</literal> oper�torral
+ hozhatod l�tre.
</para>
<informalexample>
<programlisting role="php">
<![CDATA[
- $kosar = new Kosar;
- $kosar->berak("10", 1);
+$kosar = new Kosar;
+$kosar->berak("10", 1);
+
+$masik_kosar = new Kosar;
+$masik_kosar->berak("0815", 3);
]]>
</programlisting>
</informalexample>
<para>
- Ez l�trehozza a Kosar objektumoszt�ly $kosar nev� objektump�ld�ny�t.
- Az objektum berak() f�ggv�ny�t megh�vtuk, hogy a 10-es sz�m� �rucikkb�l
- rakjon 1 darabot a kos�rba.
+ Ez l�trehozza a Kosar objektumoszt�ly $kosar �s $masik_kosar nev�
+ objektump�ld�nyait. A $kosar objektum berak() f�ggv�ny�t megh�vtuk,
+ hogy a 10-es sz�m� �rucikkb�l rakjon 1 darabot a kos�rba. H�rom
+ darab 0815 sz�m� tern�k ker�lt a $masik_kosar nev� kos�rba.
</para>
- <para>
- Oszt�lyok sz�rmazhatnak m�s oszt�lyokt�l is (�r�kl�s).
- A lesz�rmazott oszt�ly az �s minden v�ltoz�j�t �s f�ggv�ny�t
- [met�dus�t] �r�kli. Erre haszn�lhat� az extends kulcssz�.
- A t�bbsz�r�s �r�kl�s nem t�mogatott [:( vagyis egy gyereknek t�bb �st nem
- nevezhet�nk meg. A tranzit�v �r�kl�s azonban megengedett].
+ <para>
+ Mind a $kosar, mind a $masik_kosar objektumoknak megvannak
+ a break() �s kivesz() met�dusai, �s tulajdons�gai. Ezek
+ azonban egym�st�l f�ggetlen met�dusk �s tulajdons�gok. Az
+ objektumokr�l hasonl�an gondolkozhatsz, mint a k�nyvt�rakr�l
+ az �llom�nyrendszerben. Lehets�ges, hogy k�t k�l�nb�z�
+ OLVASSEL.TXT �llom�nyod van, ha ezek k�t k�l�nb�z�
+ k�nyvt�rban vannak. �gy mint a k�nyt�rakn�l, ahol meg
+ kell adnod a teljes el�r�si utat, hogy egy �llom�nyra
+ szeretn�l hivatkozni a gy�k�rk�nyvt�rban, a teljes
+ met�dusnevet meg kell adnod, hogy meg tudd azt h�vni.
+ A PHP nyelvben a gy�k�rk�nyvt�r anal�gi�ja a glob�lis
+ k�rnyezet, �s az el�r�si �t elv�laszt�ja a ->.
+ Ez�rt a $kosar->dolgok n�v �s a $masik_kosar->dolgok
+ n�v k�t k�l�nb�z� v�ltoz�t ad meg. Figyeld meg, hogy
+ a v�ltoz�t $kosar->dolgok n�ven kell el�rni, �s nem
+ $kosar->$dolgok n�ven, azaz a PHP v�ltoz�k neveiben
+ csak egy doll�rjelet kell tenned.
+ </para>
+ <informalexample>
+ <programlisting role="php">
+// helyes, egy doll�rjel
+$kosar->dolgok = array("10" => 1);
+
+// helytelen, mivel a $kosar->$dolgok �rtelme $kosar->""
+$kosar->$dolgok = array("10" => 1);
+
+// helyes, de lehets�ges, hogy nem a megc�lzott eredm�ny
+// $kosar->$valtozo �rtelme $kosar->dolgok
+$valtozo = 'dolgok;
+$kosar->$valtozo = array("10" => 1);
+ </programlisting>
+ </informalexample>
+ <para>
+ Egy oszt�ly defini�l�sakor nem tudhatod, milyen n�ven lesz majd
+ el�rhet� az objektumod a PHP programban: a Kosar oszt�ly k�sz�t�se
+ idej�n nem volt ismert, hogy k�s�bb $kosar vagy $masik_kosar n�ven
+ nevezz�k-e majd az objektump�ld�nyt. Ez�rt nem �rhatod a Kosar
+ oszt�lyban, hogy $kosar->dolgok. De hogy el tudjad �rni az
+ oszt�ly saj�t met�dusait �s tulajdons�gait az objektump�ld�ny(ok)
+ nev�t�l f�ggetlen�l, haszn�lhatod a $this kv�zi-v�ltoz�t, amit
+ 'a saj�tom' vagy 'az aktu�lis objektump�ld�ny' �rtelemben
+ alkalmazhatsz. Ez�rt a '$this->dolgok[$sorsz] += $db' �gy
+ olvashat�, hogy 'adj $db darab $sorsz sorsz�m� term�ket a
+ saj�t dolgok t�mb�mh�z', vagy 'adj $db darab $sorsz sorsz�m�
+ term�ket az aktu�lis objektump�ld�ny dolgok t�mbj�hez'.
+ </para>
+ </sect1>
+
+ <sect1 id="keyword.extends">
+ <title><literal>extends</literal></title>
+
+ <para>
+ Gyakran szeretn�l olyan oszt�lyokat kialak�tani, amelyek
+ hasonl� tulajdons�gokkal �s met�dusokkal rendelkeznek,
+ mint egy m�r megl�v� oszt�ly. Tulajdonk�ppen j� gyakorlat
+ egy �ltal�nos oszt�lyt defini�lni, amit minden projektedben
+ haszn�lhatsz, �s ezt az oszt�lyt alak�tani az egyes
+ projektek ig�nyeinek megfelel�en. Ennek a megval�s�t�sa
+ �rdek�ben az oszt�lyok lehetnek m�s oszt�lyok kiterjeszt�sei.
+ A kietrejesztett, vagy sz�rmaztatott oszt�ly minden
+ tulajdon�ggal �s met�dussal rendelkezik, ami a kiindul�si
+ oszt�lyban megvolt (ezt nevezz�k �r�kl�snek, b�r senki
+ sem hal meg a folyamat sor�n). Amit hozz�adsz a kiindul�si
+ oszt�lyhoz, azt nevezz�k kiterjeszt�snek. Nem lehets�ges
+ megcsonk�tani egy oszt�lyt, azaz megsz�ntetni egy met�dust,
+ vagy tulajdons�got. Egy lesz�rmazott oszt�ly mindig pontosan
+ egy alaposzt�lyt�l f�gg, azaz egyidej��leg t�bbsz�r�s
+ lesz�rmaztat�s nem t�mogatott. A kiterjeszt�s kulcsszava az
+ 'extends'.
</para>
<informalexample>
<programlisting role="php">
<![CDATA[
-class Gazdas_Kosar extends Kosar {
+class Gazdas_Kosar extends Kosar
+{
var $tulaj;
- function tulajdonosa ($nev) {
+ function tulajdonosa ($nev)
+ {
$this->tulaj = $nev;
}
}
@@ -110,24 +250,35 @@
]]>
</programlisting>
</informalexample>
+ </sect1>
- <para>
- Oszt�lyok f�ggv�nyein bel�l a $this a manipul�land� objektump�ld�nyt jelenti.
- A $this->valami form�t kell haszn�lnod az aktu�lis objektum valami nev�
- v�ltoz� vagy met�dus el�r�s�re.
- </para>
+ <sect1 id="language.oop.constructor">
+ <title><literal>Constructors</literal></title>
+
+ <caution>
+ <simpara>
+ A PHP 3 �s PHP 4 konstruktorok k�l�nb�z�k�ppen m�k�dnek.
+ A PHP 4 megval�s�t�sa er�sen javasolt.
+ </simpara>
+ </caution>
<para>
A konstruktorok olyan az oszt�lyok olyan met�dusai, amelyek
- automatikusan megh�v�dnak, amikor l�trehozol egy �j objektump�ld�nyt.
- Egy f�ggv�ny [met�dus] �gy lesz konstruktor, ha a neve megegyezik
- az oszt�ly nev�vel.
+ automatikusan megh�v�dnak, amikor l�trehozol egy �j objektump�ld�nyt
+ a <literal>new</literal> kulcssz�val. A PHP 3-ban egy met�dus
+ �gy v�lik konstruktorr�, hogy a neve megyezik az oszt�ly nev�vel.
+ A PHP 4-ben egy met�dus �gy lesz kostruktorr�, hogy a neve
+ megegyezik annak az oszt�lynak a nev�vel, ahol deifini�lt�k.
+ A k�l�nbs�g hajsz�lnyi, de kritikus (l�sd lentebb).
</para>
<informalexample>
<programlisting role="php">
<![CDATA[
-class Auto_Kosar extends Kosar {
- function Auto_Kosar () {
+// A PHP 3 �s PHP 4 verzi�kban is m�k�dik
+class Auto_Kosar extends Kosar
+{
+ function Auto_Kosar ()
+ {
$this->berak ("10", 1);
}
}
@@ -141,21 +292,25 @@
a kosarat 1 darab "10"-es �ruval, valah�nyszor a new oper�torral
hozzuk l�tre az objektumot. [de csak akkor!!!] A konstruktoroknak
is lehetnek param�tereik, �s ezek lehetnek opcion�lisak, ami m�g
- hasznosabb� teszi �ket.
+ hasznosabb� teszi �ket. Ha param�terek n�lk�l is haszn�lhat� oszt�lyt
+ szeretn�l, �ll�ts be minden param�ternek alap�rt�ket.
</para>
<informalexample>
<programlisting role="php">
<![CDATA[
-class Konstruktoros_Kosar extends Kosar {
- function Konstruktoros_Kosar ($sorsz = "10", $db = 1) {
+// A PHP 3 �s PHP 4 verzi�kban is m�k�dik
+class Konstruktoros_Kosar extends Kosar
+{
+ function Konstruktoros_Kosar ($sorsz = "10", $db = 1)
+ {
$this->berak ($sorsz, $db);
}
}
// Mindig ugyanazt az uncsi dolgot veszi...
-$kiindulo_kosar = new Konstruktoros_Kosar;
+$kiindulo_kosar = new Konstruktoros_Kosar;
// Igazi v�s�rl�s
@@ -166,13 +321,608 @@
<caution>
<simpara>
- A lesz�rmaztatott oszt�lyokban a sz�l� oszt�ly konstruktora
- <emphasis>NEM</emphasis> h�v�dik meg automatikusan, amikor
- a sz�rmaztatott oszt�ly konstruktor�t megh�vod.
- </simpara>
+ A PHP 3-ban a lesz�rmazott oszt�lyokra �s konstrukrotokra
+ sz�mos korl�toz�s van. Az al�bbi p�ld�kat �rdemes alaposan
+ �ttekinteni, hogy meg�rtsd ezeket a korl�toz�sokat.
+ </simpara>
+ </caution>
+
+ <informalexample>
+ <programlisting role="php">
+<![CDATA[
+class A
+{
+ function A()
+ {
+ echo "�n vagyok az A oszt�ly konstruktora.<br>\n";
+ }
+}
+
+class B extends A
+{
+ function C()
+ {
+ echo "�n egy met�dus vagyok.<br>\n";
+ }
+}
+
+// PHP 3-ban semmilyen konstruktor sem ker�l megh�v�sra
+$b = new B;
+]]>
+ </programlisting>
+ </informalexample>
+
+ <para>
+ PHP 3-ban semmilyen konstruktor sem ker�l megh�v�sra
+ a fenti p�ld�ban. A PHP 3 szab�lya a k�vetkez�:
+ 'A konstruktor egy met�dus, aminek ugyanaz a neve,
+ mint az oszt�lynak'. Az oszt�ly neve B, �s nincs B()
+ nev� met�dus a B oszt�lyban. Semmi sem t�rt�nik.
+ </para>
+
+ <para>
+ Ez a PHP 4-ben ki van jav�tva egy m�sik szab�ly bevezet�s�vel:
+ Ha az oszt�lyban nincs konstruktor, a sz�l� oszt�ly konstruktora
+ h�v�dik meg, ha l�tezik. A fenti p�lda kimenete '�n vagyok az A
+ oszt�ly konstruktora.<br>' lett volna PHP 4-ben.
+ </para>
+
+ <informalexample>
+ <programlisting role="php">
+<![CDATA[
+class A
+{
+ function A()
+ {
+ echo "�n vagyok az A oszt�ly konstruktora.<br>\n";
+ }
+
+ function B()
+ {
+ echo "�n egy B nev� met�dus vagyok az A oszt�lyban.<br>\n";
+ echo "Nem vagyok A konstruktora.<br>\n";
+ }
+}
+
+class B extends A
+{
+ function C()
+ {
+ echo "�n egy met�dus vagyok.<br>\n";
+ }
+}
+
+// Ez megh�vja B()-t, mint konstruktort
+$b = new B;
+]]>
+ </programlisting>
+ </informalexample>
+
+ <para>
+ A PHP 3-ban az A oszt�ly B() met�dusa hirtelen konstruktorr�
+ v�lik a B oszt�lyban, hab�r soha sem volt ez a c�lunk.
+ A PHP 3 szab�lya: 'A konstruktor egy met�dus, aminek ugyanaz
+ a neve, mint az oszt�lynak'. A PHP 3 nem foglalkozik azzal,
+ hogy a met�dus a B oszt�lyban van-e defini�lva, vagy �r�kl�s
+ �tj�n �ll rendelkez�sre.
+ </para>
+
+ <para>
+ Ez a PHP 4-ben ki van jav�tva egy m�sik szab�ly bevezet�s�vel:
+ 'A konstruktor egy met�dus, aminek ugyanaz a neve, mint
+ az oszt�lynak, ahol deifini�lt�k'. Ez�rt a PHP 4-ben a B
+ oszt�lynak nincs saj�t konstruktora, �gy a sz�l� oszt�ly
+ kostruktora h�v�dik meg, ki�rva, hogy '�n vagyok az A
+ oszt�ly konstruktora.<br>'.
+ </para>
+
+ <caution>
+ <simpara>
+ Sem a PHP 3, sem a PHP 4 nem h�vja meg a sz�l� oszt�ly
+ konstruktor�t automatikusan egy lesz�rmazott oszt�ly
+ defini�lt konstruktor�b�l. A te feladatod, hogy megh�vd
+ a sz�l� konstruktor�t, ha sz�ks�ges.
+ </simpara>
+ </caution>
+
+ <note>
+ <simpara>
+ Nem l�teznek destruktorok sem a PHP 3 sem a PHP 4
+ verzi�iban. B�r haszn�lhatod a
+ <function>register_shutdown_function</function>
+ f�ggv�nyt a destruktorok legt�bb viselked�s�nek
+ el�r�s�hez.
+ </simpara>
+ </note>
+
+ <para>
+ A destruktor olyan met�dus, ami automatikusan
+ megh�v�dik, amikor egy objektum megsz�nik, ak�r
+ az <function>unset</function> megh�v�s�val, ak�r
+ a k�rnyezete megsz�n�se miatt. PHP-ben nincsenek
+ destruktorok.
+ </para>
+ </sect1>
+
+ <sect1 id="keyword.paamayim_nekudotayim">
+ <title><literal>::</literal></title>
+
+ <caution>
+ <simpara>
+ Az al�bbiak csak PHP 4-ben �rv�nyesek.
+ </simpara>
</caution>
+
+ <para>
+ Id�nk�nt hasznos az �s�k met�dusaira vagy tulajdon�daira
+ hivatkozni, vagy olyan oszt�ly met�dusokat megh�vni, amik
+ nem p�ld�nyosult objektumokhoz tartoznak. A :: oper�tor
+ erre haszn�lhat�.
+ </para>
+
+ <informalexample>
+ <programlisting role="php">
+<![CDATA[
+class A
+{
+ function pelda()
+ {
+ echo "�n az eredeti A::pelda() met�dus vagyok.<br>\n";
+ }
+}
+
+class B extends A
+{
+ function pelda()
+ {
+ echo "�n a fel�ldefini�l� B::pelda() met�dus vagyok.<br>\n";
+ A::example();
+ }
+}
+
+// nincs semmilyen objektum az A oszt�lyb�l
+// ez azonban ki fogja �rni:
+// �n az eredeti A::pelda() met�dus vagyok.<br>
+A::pelda();
+
+// B egy objektu�t hozzuk l�tre
+$b = new B;
+
+// ez ki fogja �rni:
+// �n a fel�ldefini�l� B::pelda() met�dus vagyok.<br>
+// �n az eredeti A::pelda() met�dus vagyok.<br>
+$b->pelda();
+]]>
+ </programlisting>
+ </informalexample>
+
+ <para>
+ A fenti p�lda megh�vja a pelda() met�dus�t az
+ A oszt�lynak, hab�r nincs konkr�t p�ld�nyunk az
+ A oszt�lyb�l, teh�t nem �rhatn�nk azt, hogy
+ $a->pelda(), vagy valami hasonl�t. Ehelyett a
+ pelda() egy 'oszt�ly met�dusk�nt' viselkedik,
+ azaz az oszt�ly egy f�ggv�nyek�nt, �s nem
+ egy p�ld�ny met�dusak�nt.
+ </para>
+
+ <para>
+ Oszt�ly f�ggv�nyek l�teznek, de oszt�ly tulajdons�gok
+ (v�ltoz�k) nem. Mivel a h�v�s pillanat�ban semmilyen
+ objektum nem l�tezik, egy oszt�ly met�dus nem haszn�lhat
+ objektum v�ltoz�kat, �s egy�ltal�n nem haszn�lhatja a $this
+ speci�lis referenci�t. Egy objektum met�dus azonban
+ term�szetesen dolgozhat glob�lis v�ltoz�kkal �s lok�lis
+ v�ltoz�kkal is.
+ </para>
+
+ <para>
+ A fenti p�ld�ban a B oszt�ly fel�ldefini�lja a pelda()
+ met�dust. Az eredeti defin�ci� az A oszt�lyb�l elt�nik,
+ �s nem �rhet� el t�bb�, hacsak nem az A oszt�lyban
+ megval�s�tott pelda() f�ggv�nyre hivatkozol k�zvetlen�l,
+ a :: oper�tor seg�ts�g�vel. �rj A::pelda()-t, hogy
+ el�rd ezt a hat�st (ebben az esetben �rhatn�l
+ parent::pelda()-t is, ahogy a k�vetkez� bekezd�sekben
+ olvashat�).
+ </para>
+
+ <para>
+ Ebben a k�rnyezetben van egy aktu�lisan haszn�lt objektum,
+ �s ennek lehetnek objektum v�ltoz�i (tulajdons�gai).
+ Ez�rt ha egy objektum f�ggv�nyen bel�l haszn�lod ezt
+ az oper�tort, alkalmazhatod a $this-t, �s az objektum
+ tulajdons�gokat.
+ </para>
</sect1>
+
+ <sect1 id="keyword.parent">
+ <title><literal>parent</literal></title>
+
+ <para>
+ Gyakran van sz�ks�g arra, hogy a sz�l� tulajdons�gaira,
+ vagy met�dusaira hivatkozzunk lesz�rmazott oszt�lyokban.
+ Ez k�l�n�sen igaz, ha a lesz�rmazott oszt�ly egy
+ finom�t�sa, vagy specializ�l�sa az alaposzt�lynak.
+ </para>
+
+ <para>
+ Ahelyett, hogy a sz�l� oszt�ly nev�t megadd minden ilyen
+ megh�v�skor (mint a hogy a :: oper�tor p�ld�ja mutatta),
+ haszn�lhatod a <literal>parent</literal> speci�lis nevet,
+ ami tulajdonk�ppen a sz�l� oszt�ly nev�t jelenti, amit
+ az <literal>extends</literal> kulcssz�n�l megadt�l. Ennek
+ a speci�lis n�vnek a haszn�lat�val elker�l�d a sz�l�
+ oszt�ly nev�nek ism�tl�d�s�t. Ha a megval�s�t�s sor�n
+ a lesz�rmaz�si f�t meg kell v�ltoztatni, csak egy helyen,
+ az <literal>extends</literal> kulcssz�n�l kell �t�rnod
+ a nevet.
+ </para>
+
+ <informalexample>
+ <programlisting role="php">
+<![CDATA[
+class A
+{
+ function pelda()
+ {
+ echo "�n A::pelda() vagyok egyszer� funkci�val.<br>\n";
+ }
+}
+
+class B extends A
+{
+ function pelda()
+ {
+ echo "�n B::pelda() vagyok t�bb funkci�val.<br>\n";
+ parent::pelda();
+ }
+}
+
+$b = new B;
+
+// Ez a B::pelda() met�dust h�vja, ami az A::pelda()-t h�vja
+$b->pelda();
+]]>
+ </programlisting>
+ </informalexample>
+ </sect1>
+
+ <sect1 id="language.oop.serialization">
+ <title>Objektumok szerializ�ci�ja, objektumok session-�kben</title>
+
+ <note>
+ <simpara>
+ A PHP 3-ban az objektumok elvesz�tik az oszt�ly-hozz�rendel�s�ket
+ a szerializ�ci�s, �s deszerializ�ci�s folyamat sor�n. Az eredm�ny
+ objektum t�pus�, de nem tartozik semelyik oszt�lyhoz, �s nincs
+ egy met�dusa sem, teh�t el�gg� haszn�lhatatlan (csup�n egy
+ t�mb, furcsa szintakszissal).
+ </simpara>
+ </note>
+
+ <caution>
+ <simpara>
+ A k�vetkez� inform�ci�k csak a PHP 4-es v�ltozat�ra �rv�nyesek.
+ </simpara>
+ </caution>
+
+ <para>
+ A <function>serialize</function> egy karaktersorozatot
+ ad vissza, ami az �tadott �rt�k byte-sorozatban megadott
+ megfelel�je. Az <function>unserialize</function>
+ alak�t vissza egy ilyen karaktersorozatot az eredeti
+ �rt�kk�. A szerializ�ci�s folyamat sor�n egy objektum
+ �tad�s�val elmenthetj�k az objektum minden tulajdons�g�t
+ (v�ltoz�j�t). A f�ggv�nyek nem ker�lnek elment�sre,
+ csak az oszt�ly neve.
+ </para>
+
+ <para>
+ Ahhoz, hogy az <function>unserialize</function> seg�ts�g�vel
+ vissza tudj �ll�tani egy objektumot, az objektum oszt�ly�nak
+ defini�lva kell lennie. Azaz, ha van egy $a objektumod
+ (az A oszt�lyb�l), az elso.php oldalon, �s ezt szerializ�lod,
+ kapsz egy karaktersorozatot, ami az A oszt�lyra hivatkozik,
+ �s tartalmazza az �sszes $a-ban l�v� v�ltoz� (tulajdons�g)
+ �rt�k�t. Ha ezt a karaktersorozatot a masodik.php oldalon
+ objektumm� szeretn�d alak�tani, �jra l�trehozva az A oszt�ly
+ $a nev� objektum�t, az A oszt�ly defin�ci�ja rendelkez�sre
+ kell, hogy �lljon a masodik.php oldalon is. Ez �gy �rhet�
+ el, hogy az A oszt�ly defin�ci�j�t egy k�ls� �llom�nyban
+ t�rolod, �s ezt alkalmazod mind az elso.php, mind a masodik.php
+ oldalon.
+ </para>
+
+ <informalexample>
+ <programlisting role="php">
+<![CDATA[
+aosztaly.inc:
+ class A
+ {
+ var $egy = 1;
+
+ function egyet_mutat()
+ {
+ echo $this->egy;
+ }
+ }
+
+elso.php:
+ include("aosztaly.inc");
+
+ $a = new A;
+ $s = serialize($a);
+ // t�roljuk az $s-t valahol, ahol masodik.php megtal�lja
+ $fp = fopen("tarolas", "w");
+ fputs($fp, $s);
+ fclose($fp);
+
+masodik.php:
+ // ez sz�ks�ges, hogy a deszerializ�ci� rendben legyen
+ include("aosztaly.inc");
+
+ $s = implode("", @file("tarolas"));
+ $a = unserialize($s);
+
+ // most m�r haszn�lhat� az egyet_mutat() met�dus
+ $a->egyet_mutat();
+]]>
+ </programlisting>
+ </informalexample>
+
+ <para>
+ Ha session-�ket alkalmazol, �s a <function>session_register</function>
+ f�ggv�nnyel regiszt�lsz objektumokat, ezek az objektumok
+ automatikusan szerializ�l�dnak minden PHP program fut�sa
+ ut�n, �s deszerializ�l�dnak minden tov�bbi programban. Ez
+ egyszer�en azt jelenti, hogy ezek az objektumok ak�rmelyik
+ oldalon felt�nhetnek, miut�n a session r�sz�v� v�ltak.
+ </para>
+
+ <para>
+ Er�sen javasolt, hogy minden regisztr�lt objektum
+ oszt�ly defin�ci�j�t bet�ltsd minden oldalon, m�g
+ akkor is, ha �ppen nem haszn�lod azokat. Ha ezt nem
+ teszed meg, �s egy objektum �gy deszerializ�l�dik,
+ hogy nem �ll rendelkez�sre az oszt�ly defin�c�ja,
+ el fogja veszteni az oszt�ly hozz�rendel�s�t, �s
+ az <literal>stdClass</literal> oszt�ly egy p�ld�nya
+ lesz, met�dusok n�lk�l, �gy haszn�lhatatlann� v�lik.
+ </para>
+
+ <para>
+ Ez�rt ha a fenti p�ld�ban az $a a session r�sz�v�
+ v�lik a <literal>session_register("a")</literal> h�v�ssal,
+ be kell t�ltened az <literal>aosztaly.inc</literal>
+ k�ls� �llom�nyt minden oldalon, �s nem csak az elso.php
+ �s masodik.php programokban.
+ </para>
+ </sect1>
+
+ <sect1 id="language.oop.magic-functions">
+ <title>A speci�lis <literal>__sleep</literal> �s <literal>__wakeup</literal>
+met�dusok</title>
+
+ <para>
+ A <function>serialize</function> ellen�rzi, hogy van-e az
+ oszt�lyodnak <literal>__sleep</literal> nev� met�dusa. Ha van,
+ ez lefut a szerializ�ci� el�tt. Ez megtiszt�thatja az objektumot,
+ �s v�g�l egy t�mbbel t�r vissza, ami tartalmazza azon tulajdons�gok
+ neveit, amik az objektummal kapcsolatban szerializ�l�sra ker�lnek.
+ </para>
+
+ <para>
+ A <literal>__sleep</literal> c�lja, hogy bez�rjon minden
+ adatb�zis kapcsolatot, a v�rakoz� adatokat lementse, �s
+ hasonl� 'tiszt�t�' jelleg� tev�kenys�geket v�gezzen. Akkor
+ is hasznos lehet, ha nagyon nagy objektumaid vannak, amiket
+ k�l�n szeretn�l lementeni.
+ </para>
+
+ <para>
+ Ezzel szemben az <function>unserialize</function> a speci�lis
+ <literal>__wakeup</literal> nev� f�ggv�nyt haszn�lja. Ha ez
+ l�tezik, ez a f�ggv�ny alkalmazhat� arra, hogy vissza�ll�tsa
+ az objektum er�forr�sait.
+ </para>
+
+ <para>
+ A <literal>__wakeup</literal> c�lja lehet p�ld�ul,
+ hogy vissza�ll�tson egy adatb�zis kapcsolatot, ami
+ a szerializ�ci� sor�n elveszett, �s hasonl� be�ll�t�si
+ feladatokat v�gezzen.
+ </para>
+ </sect1>
+
+ <sect1 id="language.oop.newref">
+ <title>Referenci�k a konstruktorban</title>
+ <para>
+ Referenci�k k�pz�se kontruktorokban probl�m�s helyzetekhez
+ vezethet. Ez a le�r�s seg�t a bajok elker�l�s�ben.
+ <informalexample>
+ <programlisting role="php">
+<![CDATA[
+class Ize
+{
+ function Ize($nev)
+ {
+ // egy referencia l�trehoz�sa a glob�lis $globalref v�ltoz�ban
+ global $globalref;
+ $globalref[] = &$this;
+ // a n�v be�ll�t�sa a kapott �rt�kre
+ $this->nevBeallitas($nev);
+ // �s ki�r�s
+ $this->nevKiiras();
+ }
+
+ function nevKiiras()
+ {
+ echo "<br>",$this->nev;
+ }
+
+ function nevBeallitas($nev)
+ {
+ $this->nev = $nev;
+ }
+}
+]]>
+ </programlisting>
+ </informalexample>
+ </para>
+
+ <para>
+ N�zz�k, hogy van-e k�l�nbs�g az <varname>$obj1</varname>
+ �s az <varname>$obj2</varname> objektum k�z�tt. Az el�bbi
+ a <literal>=</literal> m�sol� oper�torral k�sz�lt, az
+ ut�bbi a <literal>=&</literal> referencia oper�torral
+ k�sz�lt.
+
+ <informalexample>
+ <programlisting role="php">
+<![CDATA[
+$obj1 = new Ize('konstruktorban be�ll�tott');
+$obj1->nevKiiras();
+$globalref[0]->nevKiiras();
+
+/* kimenete:
+konstruktorban be�ll�tott
+konstruktorban be�ll�tott
+konstruktorban be�ll�tott */
+
+$obj2 =& new Ize('konstruktorban be�ll�tott');
+$obj2->nevKiiras();
+$globalref[1]->nevKiiras();
+
+/* kimenete:
+konstruktorban be�ll�tott
+konstruktorban be�ll�tott
+konstruktorban be�ll�tott */
+]]>
+ </programlisting>
+ </informalexample>
+ </para>
+ <para>
+ Szemmel l�that�an nincs semmi k�l�nbs�g, de val�j�ban
+ egy nagyon fontos k�l�nbs�g van a k�t forma k�z�tt:
+ az <varname>$obj1</varname> �s <varname>$globalref[0]</varname>
+ _NEM_ referenci�k, NEM ugyanaz a k�t v�ltoz�. Ez az�rt
+ t�rt�nhet �gy, mert a "new" alapvet�en nem referenci�val
+ t�r vissza, hanem egy m�solatot ad.
+ <note>
+ <simpara>
+ Nincsenek teljes�tm�nybeli probl�m�k a m�solatok visszaad�sakor,
+ mivel a PHP 4 �s �jabb verzi�k referencia sz�ml�l�st alkalmaznak.
+ Legt�bbsz�r ellenben jobb m�solatokkal dolgozni referenci�k
+ helyett, mivel a referenci�k k�pz�se eltart egy kis ideig, de
+ a m�solatok k�pz�se gyakorlatilag nem ig�nyel id�t. Ha egyik
+ sem egy nagy t�mb, vagy objektum, �s a v�ltoz�sokat nem
+ szeretn�d mindegyik p�ld�nyban egyszerre l�tni, akkor m�solatok
+ haszn�lat�val jobban j�rsz.
+ </simpara>
+ </note>
+ Hogy bebizony�tsuk, amit fent �rtunk, l�sd az al�bbi k�dot:
+
+ <informalexample>
+ <programlisting role="php">
+<![CDATA[
+// Most megv�ltoztatjuk a nevet. Mit v�rsz?
+// Sz�m�thatsz arra, hogy mind $obj1 �s $globalref[0] megv�ltozik...
+$obj1->nevBeallitas('k�v�lr�l be�ll�tva');
+
+// mint kor�bban �rtuk, nem ez a helyzet
+$obj1->nevKiiras();
+$globalref[0]->nevKiiras();
+
+/* kimenet:
+konstruktorban be�ll�tott
+k�v�lr�l be�ll�tva */
+
+// l�ssuk mi a k�l�nbs�g az $obj2 �s $globalref[1] eset�n
+$obj2->nevBeallitas('k�v�lr�l be�ll�tva');
+
+// szerencs�re ezek nem csak egyenl�ek, hanem �ppen ugyan az
+// a k�t v�ltoz�, �gy $obj2->nev �s $globalref[1]->nev ugyanaz
+$obj2->nevKiiras();
+$globalref[1]->nevKiiras();
+
+/* kimenete:
+k�v�lr�l be�ll�tva
+k�v�lr�l be�ll�tva */
+]]>
+ </programlisting>
+ </informalexample>
+ </para>
+ <para>
+ V�g�l m�g egy utols� p�lda, pr�b�ld meg meg�rteni.
+
+ <informalexample>
+ <programlisting role="php">
+<![CDATA[
+class A
+{
+ function A($i)
+ {
+ $this->ertek = $i;
+ // pr�b�ld meg kital�lni, mi�rt nem kell itt referencia
+ $this->b = new B($this);
+ }
+
+ function refLetrehozas()
+ {
+ $this->c = new B($this);
+ }
+
+ function ertekKiiras()
+ {
+ echo "<br>",get_class($this),' oszt�ly: ',$this->value;
+ }
+}
+
+
+class B
+{
+ function B(&$a)
+ {
+ $this->a = &$a;
+ }
+
+ function ertekKiiras()
+ {
+ echo "<br>",get_class($this),' oszt�ly: ',$this->a->value;
+ }
+}
+
+// pr�b�ld meg meg�rteni, hogy egy egyszer� m�sol�s
+// mi�rt okoz nem v�rt eredm�nyeket a *-al jel�lt sorban
+$a =& new A(10);
+$a->refLetrehozas();
+
+$a->ertekKiiras();
+$a->b->ertekKiiras();
+$a->c->ertekKiiras();
+
+$a->ertek = 11;
+
+$a->ertekKiiras();
+$a->b->ertekKiiras(); // *
+$a->c->ertekKiiras();
+
+/*
+kimenete:
+A oszt�ly: 10
+B oszt�ly: 10
+B oszt�ly: 10
+A oszt�ly: 11
+B oszt�ly: 11
+B oszt�ly: 11
+*/
+]]>
+ </programlisting>
+ </informalexample>
+ </para>
+ </sect1>
+
</chapter>
<!-- Keep this comment at the end of the file