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 -&gt;.
+    Ez�rt a $kosar-&gt;dolgok n�v �s a $masik_kosar-&gt;dolgok
+    n�v k�t k�l�nb�z� v�ltoz�t ad meg. Figyeld meg, hogy
+    a v�ltoz�t $kosar-&gt;dolgok n�ven kell el�rni, �s nem
+    $kosar-&gt;$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-&gt;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.&lt;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.&lt;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>=&amp;</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

Reply via email to