cvs: phpdoc-sl /language oop.xml
| From: | Dejan Markic | Date: | Mon, 20 Jan 2003 18:27:04 +0000 |
| Subject: | cvs: phpdoc-sl /language oop.xml | ||
| Groups: | php.doc.sl | ||
| Request: | Send a blank email to doc-sl+get-46@lists.php.net to get a copy of this message | ||
dejan Mon Jan 20 13:27:04 2003 EDT
Modified files:
/phpdoc-sl/language oop.xml
Log:
Done. For now.
Index: phpdoc-sl/language/oop.xml diff -u phpdoc-sl/language/oop.xml:1.3 phpdoc-sl/language/oop.xml:1.4 --- phpdoc-sl/language/oop.xml:1.3 Sun Jan 19 16:11:22 2003 +++ phpdoc-sl/language/oop.xml Mon Jan 20 13:27:04 2003 @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="iso-8859-1"?> -<!-- $Revision: 1.3 $ --> -<!-- $EN-Revision: 1.36 Maintainer: dejan Status: working --> +<!-- $Revision: 1.4 $ --> +<!-- $EN-Revision: 1.36 Maintainer: dejan Status: ready --> <chapter id="language.oop"> <title>Razredi in objekti</title> @@ -16,16 +16,16 @@ <?php class Cart { - var $items; // Items in our shopping cart + var $items; // Predmeti v vozicku - // Add $num articles of $artnr to the cart + // Dodaj $num predmetov z stevilko artikla $artnr function add_item ($artnr, $num) { $this->items[$artnr] += $num; } - // Take $num articles of $artnr out of the cart + // Vzemi $num predmetov iz vozicka ki imajo stevilko artikla $artnr function remove_item ($artnr, $num) { @@ -68,7 +68,7 @@ </simpara> <simpara> - PHP si je rezervilal vse funkcije ki se pričnejo z __ kot posebne. + PHP si je rezerviral vse funkcije ki se pričnejo z __ kot posebne. Priporočljivo je, da ne uporabljate funkcij z __ razen če bi radi uporabili kak&353;o od dokumentiranih funkcionalnosti. </simpara> @@ -76,9 +76,9 @@ <note> <simpara> - V PHP 4 so dovoljeni samo initializatorji konstant <literal>var</literal> + V PHP 4 so dovoljeni samo initializatorji konstant <literal>var</literal>. Da bi inicializirali spremenljivko z ne-konstantno vrednostjo, morate imeti - inicializacijsko fukcijo, ki je klicana avtomatično ko kreiramo objekt + inicializacijsko fukcijo, ki je klicana avtomatično, ko kreiramo objekt iz razreda. Taka funkcija se imenuje konstruktor (poglejte spodaj). </simpara> <informalexample> @@ -147,12 +147,12 @@ datotečnem sistemu. V datotečnem sistemu imate lahko dve različni datoteki README.TXT dokler sta ti dve datoteki vsaka v svojem direktoriju. Tako kot pri direktorijih, kjer morate vpisati celotno - pot iz vrhovnega direktorija, morate tu uporabiti celotno ime funkcije ki jo + pot iz vrhovnega direktorija, morate tu uporabiti celotno ime funkcije, ki jo želite klicati. V PHP-ju bi bil vrhovni direktorij globalni imenski prostor in ločilec za direktorije ->. Tako so imena $var->items in $another_cart->items imena za dve različni spremenljivki. Zapomnite si da je spremenljivka - imenovana $cart->items in ne $cart->$items. To poemni, da ima + imenovana $cart->items in ne $cart->$items. To pomeni, da ima spremenljivka v PHP-ju samo en dolar znak. </para> @@ -166,7 +166,7 @@ $cart->$items = array("10" => 1); // pravilno, ce je to kar ste zeleli: -// $cart->$myvar becomes $cart->items +// $cart->$myvar postane $cart->items $myvar = 'items'; $cart->$myvar = array("10" => 1); ]]> @@ -247,7 +247,7 @@ </informalexample> <para> - Temu pravimo "parent-child" zveza. Vi ustvarite razred, parent + Temu pravimo "parent-child" zveza. Vi ustvarite razred, parent, in uporabite <literal>extends</literal> da ustvarite nov razred, ki <emphasis>temelji</emphasis> na parent razredu: child razred. Child razred lahko uporabite tudi za ustvarjanje novega razreda, ki temelji na tem @@ -255,7 +255,7 @@ </para> <note> <para> - Razredi morajo biti definirani pred uporabo! Če želite da razred + Razredi morajo biti definirani pred uporabo! Če želite, da razred <literal>Named_Cart</literal> podeduje razred <literal>Cart</literal>, boste morali prvo definirati razred <literal>Cart</literal>. Če želite ustvariti še <literal>Yellow_named_cart</literal> razred, ki temelji na @@ -277,7 +277,7 @@ </caution> <para> - Konstruktorji so funkcije v razredu, ki so klicate avtomatsko ko + Konstruktorji so funkcije v razredu, ki so klicat+ne avtomatsko, ko ustvarite novo instanco razreda z <literal>new</literal>. V PHP 3 funkcija postane konstruktor, ko ima isto ime kot razred. V PHP 4 funkcija postane konstruktor, ko ima isto ime kot razred v katerem je @@ -301,7 +301,7 @@ <para> Zgornja koda definira razred Auto_Cart, torej Cart in konstruktor, - ki inicializira Cart z novim predmeto, ki ima številko artikla + ki inicializira Cart z novim predmetom, ki ima številko artikla "10", vsakič ko ga ustvarimo z "new". Konstruktorji imajo lahko tudi argumente, kar jim seveda poveča uporabnost. Da bi lahko uporabili razred brez parametrov, definiramo argumente kot neobvezne z @@ -378,7 +378,7 @@ <para> To je popravljeno v PHP 4 z novim pravilom: Če razred nima - konstruktorja, kličemo konstrukor osnovnega razreda, če + konstruktorja, kličemo konstrukor osnovnega razreda, če ta obstaja. Zgornji primer bi izpisal: 'Jaz sem konstruktor razreda A.<br>' v PHP 4. </para> @@ -506,7 +506,7 @@ Zgornji primer kliče funkcijo expample() v razredu A, ampak objekt razreda A ne obstaja, torej ne moremo napisati $a->example() ali podobno. Namesto tega, kličemo - funkcijo example()= kot 'razredno funkcijo', torej kot funkcijo + funkcijo example() kot 'razredno funkcijo', torej kot funkcijo samega razreda in ne objekta tega razreda. </para> @@ -537,22 +537,19 @@ <title><literal>parent</literal></title> <para> - You may find yourself writing code that refers to - variables and functions in base classes. This is - particularly true if your derived class is a refinement - or specialisation of code in your base class. + Pisali boste tudi kodo, kjer boste želeli uporabljati + spremenljivke in funkcije osnovnega razreda. To predvsem velja za + izpeljane razrede, ki temeljijo na kodi vašega osnovnega + razreda. </para> <para> - Instead of using the literal name of the base class in your - code, you should be using the special name - <literal>parent</literal>, which refers to the name of your - base class as given in the <literal>extends</literal> - declation of your class. By doing this, you avoid using the - name of your base class in more than one place. Should - your inheritance tree change during implementation, the - change is easily made by simply changing the - <literal>extends</literal> declaration of your class. + Namesto da bi uporabili pravo ime osnovnega razreda v vaši kodi, + lahko uporabite posebno ime <literal>parent</literal>, ki naslavlja ime + vašega osnovnega razreda, kot je bilo določeno z + <literal>extends</literal> v deklaraciji vašega razreda. Če + bi se dedovalno drevo spremenilo med implementacijo, samo spremenite + <literal>extends</literal> deklaracijo v vašem razredu. </para> <informalexample> @@ -562,7 +559,7 @@ { function example() { - echo "I am A::example() and provide basic functionality.<br>\n"; + echo "Jaz sem A::example() in ponujam osnovno funkcionalnost.<br>\n"; } } @@ -570,14 +567,14 @@ { function example() { - echo "I am B::example() and provide additional functionality.<br>\n"; + echo "Jaz sem B::example() in ponujam dodatno funkcionalnost.<br>\n"; parent::example(); } } $b = new B; -// This will call B::example(), which will in turn call A::example(). +// To bo klicalo B::example(), ki bo nato klicato tudi A::example(). $b->example(); ]]> </programlisting> @@ -585,45 +582,42 @@ </sect1> <sect1 id="language.oop.serialization"> - <title>Serializing objects - objects in sessions</title> + <title>Serializacija objektov - objekti in seje</title> <note> <simpara> - In PHP 3, objects will lose their class association - throughout the process of serialization and unserialization. - The resulting variable is of type object, but has no class - and no methods, thus it is pretty useless (it has become - just like an array with a funny syntax). + V PHP 3, objekti izgubijo svojo asociacijo z razredom med procesom + serializacije in odserializacije. Dobljena spremenljivka je tipa objekt, + a nima nobenega razreda ali metod, torej je dokaj neuporabna (postane isto + kot tabela s smešno sintakso). </simpara> </note> <caution> <simpara> - The following information is valid for PHP 4 only. + Naslednja informacija velja samo za PHP 4. </simpara> </caution> <para> - <function>serialize</function> returns a string containing a - byte-stream representation of any value that can be stored in - PHP. <function>unserialize</function> can use this string to - recreate the original variable values. Using serialize to - save an object will save all variables in an object. The - functions in an object will not be saved, only the name of - the class. + Funkcija <function>serialize</function> vrne niz, ki vsebuje + byte-stream reprezentacijo katerekoli vrednosti ki je lahko shranjena + v PHP-ju. Funkcija <function>unserialaze</function> lahko uporabi ta + niz za obnovo originalnih vrednosti spremenljivke. Uporaba serialize + za shranjevanje objekta bo ohranilo vse sremenljivke v objektu. + Funkcije v razredu ne bojo shranjene, shranjeno bo le ime razreda. </para> <para> - In order to be able to <function>unserialize</function> an - object, the class of that object needs to be defined. That - is, if you have an object $a of class A on page1.php and - serialize this, you'll get a string that refers to class A - and contains all values of variabled contained in $a. If - you want to be able to unserialize this on page2.php, - recreating $a of class A, the definition of class A must - be present in page2.php. This can be done for example - by storing the class defintion of class A in an include - file and including this file in both page1.php and page2.php. + Da bi lahko s funkcijo <function>unserialize</function> + odserializirali objekt, mora bit razred tega objekta definiran. + To pomeni, če imate objekt $a razreda A na strani page1.php in + serializirate to, boste dobili niz, ki se nanaša na + razred A in vse vrednosti spremenljivk, ki so v objektu $a. + Če želite odserializirati to na strani page2.php, + obnoviti $a iz razreda A, mora biti definicija razreda A definirana. + To lahko naprimer dosežemo z definicijo razreda v neki + datoteki, ki jo v vključimo v obe strani. </para> <informalexample> @@ -645,91 +639,88 @@ $a = new A; $s = serialize($a); - // store $s somewhere where page2.php can find it. + // shranimo $s nekam, kjer ga bo page2.php lahko nasla. $fp = fopen("store", "w"); fputs($fp, $s); fclose($fp); page2.php: - // this is needed for the unserialize to work properly. + // to je potrebno za pravilno delovanje funkcije unserialize. include("classa.inc"); $s = implode("", @file("store")); $a = unserialize($s); - // now use the function show_one() of the $a object. + // sedaj lahko uporabimo funkcijo show_one() objekta $a. $a->show_one(); ]]> </programlisting> </informalexample> <para> - If you are using sessions and use <function>session_register</function> - to register objects, these objects are serialized automatically - at the end of each PHP page, and are unserialized automatically on - each of the following pages. This basically means that these objects - can show up on any of your pages once they become part of your - session. + Če uporabljate seje in uporabljate funkcijo + <function>session_register</function> za registracijo objektov, bodo + objekti avtomatsko serializirani na koncu PHP strani, in seveda avtomatsko + odserializirani na vsaki naslednji strani. To nasplošno pomeni, da se + lahko ti objekti pojavljajo na vsaki strani, ko so del vaše seje. </para> <para> - It is strongly recommended that you include the class - definitions of all such registered objects on all of your - pages, even if you do not actually use these classes on all - of your pages. If you don't and an object is being - unserialized without its class definition being present, it - will lose its class association and become an object of class - <literal>stdClass</literal> without any functions available - at all, that is, it will become quite useless. + Zelo priporočljivo je, da vključite definicije + vseh tako registriranih objektov na vseh straneh, čeprav + mogoče kakšnega ne uporabljate na vsaki strani. + Če to ne naredite in da se objekt odserializira brez + definicije svojega razreda, bo izgubil vse asociacije z razredom in + bo postal objekt razreda <literal>stdClass</literal> brez funkcij. + Torej bo postal neuporaben. </para> <para> - So if in the example above $a became part of a session by - running <literal>session_register("a")</literal>, you should - include the file <literal>classa.inc</literal> on all of your - pages, not only page1.php and page2.php. + Torej če v zgornjem primeru $a postane del seje z + uporabo funkcije <literal>session_register("a")</literal>, + bi morali vključiti datoteko <literal>classa.inc</literal> v + vse vaše strani, ne samo na strani page1.php in page2.php. </para> </sect1> <sect1 id="language.oop.magic-functions"> - <title>The magic functions <literal>__sleep</literal> and <literal>__wakeup</literal></title> + <title>Posebne funkcije <literal>__sleep</literal> in <literal>__wakeup</literal></title> <para> - <function>serialize</function> checks if your class has a function with - the magic name <literal>__sleep</literal>. If so, that function is - being run prior to any serialization. It can clean up the object - and is supposed to return an array with the names of all variables - of that object that should be serialized. + Funkcija <function>serialize</function> preveri ali vaš razred + vsebuje funkcijo s posebnim imenom <literal>__sleep</literal>. Če + ta obstaja, jo bo funkcija <function>serialize</function> klicala pred + serializacijo. Funkcija naj bi očistila objekt in naj bi vrnila + tabelo z vsemi imeni spremenljivk, ki naj bojo serializirane. </para> <para> - The intended use of <literal>__sleep</literal> is to close any - database connections that object may have, committing pending - data or perform similar cleanup tasks. Also, the function is - useful if you have very large objects which need not be - saved completely. + Namenjena uporaba <literal>__sleep</literal> je, da zapremo vse + povezave na baze, ki jih ta objekt ima, zapisati vse čakajoče + podatke ali kaksne podobne naloge. Pravtako je funkcija uporabna, ko imate + zelo velike razrede in ni potrebno shranjevati celih razredov. </para> <para> - Conversely, <function>unserialize</function> checks for the - presence of a function with the magic name - <literal>__wakeup</literal>. If present, this function can - reconstruct any resources that object may have. + Nasprotno, pa funkcija <function>unserialize</function> preveri + ali obstaja funkcija s posebnim imenom <literal>__wakeup</literal>. + Če je ta prisotna, lahko funkcija rekonstruira vse vire podatkov, ki + jih je ta objekt imel. </para> <para> - The intended use of <literal>__wakeup</literal> is to - reestablish any database connections that may have been lost - during serialization and perform other reinitialization - tasks. + Namenjena uporaba <literal>__wakeup</literal> je, da ponovno + vzpostavi vse povezave na baze, ki so bile izgubljene med + serializacijo in da opravi druge reinitializacijske naloge. </para> </sect1> <sect1 id="language.oop.newref"> - <title>References inside the constructor</title> + <title>Reference znotraj konstruktorja</title> <para> - Creating references within the constructor can lead to confusing - results. This tutorial-like section helps you to avoid problems. + Ustvarjanje reference znotraj konstruktorja lahko pripelje do + čudnih rezultatov. Naslednje informacije vam bodo pomagale + izogniti se temu problemu. <informalexample> <programlisting role="php"> @@ -738,12 +729,12 @@ { function Foo($name) { - // create a reference inside the global array $globalref + // ustvari referenco znotraj globalne tabele $globalref global $globalref; $globalref[] = &$this; - // set name to passed value + // nastavi name na podano vrednost $this->setName($name); - // and put it out + // izpisi to vrednost $this->echoName(); } @@ -763,88 +754,86 @@ </para> <para> - Let us check out if there is a difference between - <varname>$bar1</varname> which has been created using - the copy <literal>=</literal> operator and - <varname>$bar2</varname> which has been created using - the reference <literal>=&</literal> operator... + Pa poglejmo, če je razlika med <varname>$bar1</varname>, ki + je bila ustvarjena z <literal>=</literal> opratorjem in + <varname>$bar2</varname>, ki je bila ustvarjena z + referenčnim operatorjem <literal>=&</literal> ... <informalexample> <programlisting role="php"> <![CDATA[ -$bar1 = new Foo('set in constructor'); +$bar1 = new Foo('nastavljen v konstruktorju'); $bar1->echoName(); $globalref[0]->echoName(); -/* output: -set in constructor -set in constructor -set in constructor */ +/* izpis: +nastavljen v konstruktorju +nastavljen v konstruktorju +nastavljen v konstruktorju */ -$bar2 =& new Foo('set in constructor'); +$bar2 =& new Foo('nastavljen v konstruktorju'); $bar2->echoName(); $globalref[1]->echoName(); -/* output: -set in constructor -set in constructor -set in constructor */ +/* izpis: +nastavljen v konstruktorju +nastavljen v konstruktorju +nastavljen v konstruktorju */ ]]> </programlisting> </informalexample> </para> <para> - Apparently there is no difference, but in fact there is a - very significant one: <varname>$bar1</varname> and - <varname>$globalref[0]</varname> are _NOT_ referenced, they - are NOT the same variable. This is because "new" does not - return a reference by default, instead it returns a copy. + Na pogled ni razlike, vedar obstaja ena zelo pomembna: + <varname>$bar1</varname> in <varname>$globalref[0]</varname> + _NISTA_ referenčni in ista isti spremenljivki. To je zato, + ker "new" ne vrne reference, ampak vrne kopijo. <note> <simpara> - There is no performance loss (since PHP 4 and up use reference - counting) returning copies instead of references. On the - contrary it is most often better to simply work with copies - instead of references, because creating references takes some - time where creating copies virtually takes no time (unless none - of them is a large array or object and one of them gets changed - and the other(s) one(s) subsequently, then it would be wise to - use references to change them all concurrently). + Nič ne izgubimo na hitrosti (od PHP 4 naprej, uporablja + štetje referenc), če uporabljamo kopije namesto + referenc. Prav nasprotno, ponavadi je bolje preprosto delati z + kopijami, ker ustvarjanje referenc traja nekaj časa, za ustvarjanje + kopije pa ne porabimo praktično nič časa (razen, + če je to kaksna velika tabela ali objekt in spreminjamo enega + za drugim, kjer bi bilo pametneje uporabiti referenco, kjer bi spremenili + vse hkrati). </simpara> </note> - To prove what is written above let us watch the code below. + Za obrazložitev, si poglejte spodnjo kodo. <informalexample> <programlisting role="php"> <![CDATA[ -// now we will change the name. what do you expect? -// you could expect that both $bar1 and $globalref[0] change their names... -$bar1->setName('set from outside'); +// sedaj bomo zamenjali name. Kaj pricakujete? +// lahko bi pricakovali da se bosta $bar in $globalref[0] spremenila ... +$bar1->setName('nastavljen od zunaj'); -// as mentioned before this is not the case. +// kot je omenjeno zgoraj, se to ne zgodi. $bar1->echoName(); $globalref[0]->echoName(); /* output: -set from outside -set in constructor */ +nastavljen do zunaj +nastavljen v konstruktorju */ -// let us see what is different with $bar2 and $globalref[1] -$bar2->setName('set from outside'); +// poglejmo kaksna je razlika z $bar2 in $globalref[1] +$bar2->setName('nastavljen od zunaj'); -// luckily they are not only equal, they are the same variable -// thus $bar2->name and $globalref[1]->name are the same too +// na sreco niso samo enake, temvec tudi iste spremenljivke +// torej sta $bar2->name in $globalref[1]->name isti $bar2->echoName(); $globalref[1]->echoName(); -/* output: -set from outside -set from outside */ +/* izpis: +nastavljen od zunaj +nastavljen od zunaj */ ]]> </programlisting> </informalexample> </para> <para> - Another final example, try to understand it. + Še en primer, poskusite ga razumeti. <informalexample> <programlisting role="php"> @@ -854,7 +843,7 @@ function A($i) { $this->value = $i; - // try to figure out why we do not need a reference here + // poskusite ugotoviti zakaj ne potrebujemo reference tukaj $this->b = new B($this); } @@ -865,7 +854,7 @@ function echoValue() { - echo "<br>","class ",get_class($this),': ',$this->value; + echo "<br>","razred ",get_class($this),': ',$this->value; } } @@ -879,12 +868,12 @@ function echoValue() { - echo "<br>","class ",get_class($this),': ',$this->a->value; + echo "<br>","razred ",get_class($this),': ',$this->a->value; } } -// try to undestand why using a simple copy here would yield -// in an undesired result in the *-marked line +// poskusite ugotoviti zakaj tukaj navadna kopija nebi prinesla +// zeljenih rezultatov v vrstici oznaceni z * $a =& new A(10); $a->createRef(); @@ -899,13 +888,13 @@ $a->c->echoValue(); /* -output: -class A: 10 -class B: 10 -class B: 10 -class A: 11 -class B: 11 -class B: 11 +izpis: +razred A: 10 +razred B: 10 +razred B: 10 +razred A: 11 +razred B: 11 +razred B: 11 */ ]]> </programlisting>
Index: phpdoc-sl/language/oop.xml diff -u phpdoc-sl/language/oop.xml:1.3 phpdoc-sl/language/oop.xml:1.4 --- phpdoc-sl/language/oop.xml:1.3 Sun Jan 19 16:11:22 2003 +++ phpdoc-sl/language/oop.xml Mon Jan 20 13:27:04 2003 @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="iso-8859-1"?> -<!-- $Revision: 1.3 $ --> -<!-- $EN-Revision: 1.36 Maintainer: dejan Status: working --> +<!-- $Revision: 1.4 $ --> +<!-- $EN-Revision: 1.36 Maintainer: dejan Status: ready --> <chapter id="language.oop"> <title>Razredi in objekti</title> @@ -16,16 +16,16 @@ <?php class Cart { - var $items; // Items in our shopping cart + var $items; // Predmeti v vozicku - // Add $num articles of $artnr to the cart + // Dodaj $num predmetov z stevilko artikla $artnr function add_item ($artnr, $num) { $this->items[$artnr] += $num; } - // Take $num articles of $artnr out of the cart + // Vzemi $num predmetov iz vozicka ki imajo stevilko artikla $artnr function remove_item ($artnr, $num) { @@ -68,7 +68,7 @@ </simpara> <simpara> - PHP si je rezervilal vse funkcije ki se pričnejo z __ kot posebne. + PHP si je rezerviral vse funkcije ki se pričnejo z __ kot posebne. Priporočljivo je, da ne uporabljate funkcij z __ razen če bi radi uporabili kak&353;o od dokumentiranih funkcionalnosti. </simpara> @@ -76,9 +76,9 @@ <note> <simpara> - V PHP 4 so dovoljeni samo initializatorji konstant <literal>var</literal> + V PHP 4 so dovoljeni samo initializatorji konstant <literal>var</literal>. Da bi inicializirali spremenljivko z ne-konstantno vrednostjo, morate imeti - inicializacijsko fukcijo, ki je klicana avtomatično ko kreiramo objekt + inicializacijsko fukcijo, ki je klicana avtomatično, ko kreiramo objekt iz razreda. Taka funkcija se imenuje konstruktor (poglejte spodaj). </simpara> <informalexample> @@ -147,12 +147,12 @@ datotečnem sistemu. V datotečnem sistemu imate lahko dve različni datoteki README.TXT dokler sta ti dve datoteki vsaka v svojem direktoriju. Tako kot pri direktorijih, kjer morate vpisati celotno - pot iz vrhovnega direktorija, morate tu uporabiti celotno ime funkcije ki jo + pot iz vrhovnega direktorija, morate tu uporabiti celotno ime funkcije, ki jo želite klicati. V PHP-ju bi bil vrhovni direktorij globalni imenski prostor in ločilec za direktorije ->. Tako so imena $var->items in $another_cart->items imena za dve različni spremenljivki. Zapomnite si da je spremenljivka - imenovana $cart->items in ne $cart->$items. To poemni, da ima + imenovana $cart->items in ne $cart->$items. To pomeni, da ima spremenljivka v PHP-ju samo en dolar znak. </para> @@ -166,7 +166,7 @@ $cart->$items = array("10" => 1); // pravilno, ce je to kar ste zeleli: -// $cart->$myvar becomes $cart->items +// $cart->$myvar postane $cart->items $myvar = 'items'; $cart->$myvar = array("10" => 1); ]]> @@ -247,7 +247,7 @@ </informalexample> <para> - Temu pravimo "parent-child" zveza. Vi ustvarite razred, parent + Temu pravimo "parent-child" zveza. Vi ustvarite razred, parent, in uporabite <literal>extends</literal> da ustvarite nov razred, ki <emphasis>temelji</emphasis> na parent razredu: child razred. Child razred lahko uporabite tudi za ustvarjanje novega razreda, ki temelji na tem @@ -255,7 +255,7 @@ </para> <note> <para> - Razredi morajo biti definirani pred uporabo! Če želite da razred + Razredi morajo biti definirani pred uporabo! Če želite, da razred <literal>Named_Cart</literal> podeduje razred <literal>Cart</literal>, boste morali prvo definirati razred <literal>Cart</literal>. Če želite ustvariti še <literal>Yellow_named_cart</literal> razred, ki temelji na @@ -277,7 +277,7 @@ </caution> <para> - Konstruktorji so funkcije v razredu, ki so klicate avtomatsko ko + Konstruktorji so funkcije v razredu, ki so klicat+ne avtomatsko, ko ustvarite novo instanco razreda z <literal>new</literal>. V PHP 3 funkcija postane konstruktor, ko ima isto ime kot razred. V PHP 4 funkcija postane konstruktor, ko ima isto ime kot razred v katerem je @@ -301,7 +301,7 @@ <para> Zgornja koda definira razred Auto_Cart, torej Cart in konstruktor, - ki inicializira Cart z novim predmeto, ki ima številko artikla + ki inicializira Cart z novim predmetom, ki ima številko artikla "10", vsakič ko ga ustvarimo z "new". Konstruktorji imajo lahko tudi argumente, kar jim seveda poveča uporabnost. Da bi lahko uporabili razred brez parametrov, definiramo argumente kot neobvezne z @@ -378,7 +378,7 @@ <para> To je popravljeno v PHP 4 z novim pravilom: Če razred nima - konstruktorja, kličemo konstrukor osnovnega razreda, če + konstruktorja, kličemo konstrukor osnovnega razreda, če ta obstaja. Zgornji primer bi izpisal: 'Jaz sem konstruktor razreda A.<br>' v PHP 4. </para> @@ -506,7 +506,7 @@ Zgornji primer kliče funkcijo expample() v razredu A, ampak objekt razreda A ne obstaja, torej ne moremo napisati $a->example() ali podobno. Namesto tega, kličemo - funkcijo example()= kot 'razredno funkcijo', torej kot funkcijo + funkcijo example() kot 'razredno funkcijo', torej kot funkcijo samega razreda in ne objekta tega razreda. </para> @@ -537,22 +537,19 @@ <title><literal>parent</literal></title> <para> - You may find yourself writing code that refers to - variables and functions in base classes. This is - particularly true if your derived class is a refinement - or specialisation of code in your base class. + Pisali boste tudi kodo, kjer boste želeli uporabljati + spremenljivke in funkcije osnovnega razreda. To predvsem velja za + izpeljane razrede, ki temeljijo na kodi vašega osnovnega + razreda. </para> <para> - Instead of using the literal name of the base class in your - code, you should be using the special name - <literal>parent</literal>, which refers to the name of your - base class as given in the <literal>extends</literal> - declation of your class. By doing this, you avoid using the - name of your base class in more than one place. Should - your inheritance tree change during implementation, the - change is easily made by simply changing the - <literal>extends</literal> declaration of your class. + Namesto da bi uporabili pravo ime osnovnega razreda v vaši kodi, + lahko uporabite posebno ime <literal>parent</literal>, ki naslavlja ime + vašega osnovnega razreda, kot je bilo določeno z + <literal>extends</literal> v deklaraciji vašega razreda. Če + bi se dedovalno drevo spremenilo med implementacijo, samo spremenite + <literal>extends</literal> deklaracijo v vašem razredu. </para> <informalexample> @@ -562,7 +559,7 @@ { function example() { - echo "I am A::example() and provide basic functionality.<br>\n"; + echo "Jaz sem A::example() in ponujam osnovno funkcionalnost.<br>\n"; } } @@ -570,14 +567,14 @@ { function example() { - echo "I am B::example() and provide additional functionality.<br>\n"; + echo "Jaz sem B::example() in ponujam dodatno funkcionalnost.<br>\n"; parent::example(); } } $b = new B; -// This will call B::example(), which will in turn call A::example(). +// To bo klicalo B::example(), ki bo nato klicato tudi A::example(). $b->example(); ]]> </programlisting> @@ -585,45 +582,42 @@ </sect1> <sect1 id="language.oop.serialization"> - <title>Serializing objects - objects in sessions</title> + <title>Serializacija objektov - objekti in seje</title> <note> <simpara> - In PHP 3, objects will lose their class association - throughout the process of serialization and unserialization. - The resulting variable is of type object, but has no class - and no methods, thus it is pretty useless (it has become - just like an array with a funny syntax). + V PHP 3, objekti izgubijo svojo asociacijo z razredom med procesom + serializacije in odserializacije. Dobljena spremenljivka je tipa objekt, + a nima nobenega razreda ali metod, torej je dokaj neuporabna (postane isto + kot tabela s smešno sintakso). </simpara> </note> <caution> <simpara> - The following information is valid for PHP 4 only. + Naslednja informacija velja samo za PHP 4. </simpara> </caution> <para> - <function>serialize</function> returns a string containing a - byte-stream representation of any value that can be stored in - PHP. <function>unserialize</function> can use this string to - recreate the original variable values. Using serialize to - save an object will save all variables in an object. The - functions in an object will not be saved, only the name of - the class. + Funkcija <function>serialize</function> vrne niz, ki vsebuje + byte-stream reprezentacijo katerekoli vrednosti ki je lahko shranjena + v PHP-ju. Funkcija <function>unserialaze</function> lahko uporabi ta + niz za obnovo originalnih vrednosti spremenljivke. Uporaba serialize + za shranjevanje objekta bo ohranilo vse sremenljivke v objektu. + Funkcije v razredu ne bojo shranjene, shranjeno bo le ime razreda. </para> <para> - In order to be able to <function>unserialize</function> an - object, the class of that object needs to be defined. That - is, if you have an object $a of class A on page1.php and - serialize this, you'll get a string that refers to class A - and contains all values of variabled contained in $a. If - you want to be able to unserialize this on page2.php, - recreating $a of class A, the definition of class A must - be present in page2.php. This can be done for example - by storing the class defintion of class A in an include - file and including this file in both page1.php and page2.php. + Da bi lahko s funkcijo <function>unserialize</function> + odserializirali objekt, mora bit razred tega objekta definiran. + To pomeni, če imate objekt $a razreda A na strani page1.php in + serializirate to, boste dobili niz, ki se nanaša na + razred A in vse vrednosti spremenljivk, ki so v objektu $a. + Če želite odserializirati to na strani page2.php, + obnoviti $a iz razreda A, mora biti definicija razreda A definirana. + To lahko naprimer dosežemo z definicijo razreda v neki + datoteki, ki jo v vključimo v obe strani. </para> <informalexample> @@ -645,91 +639,88 @@ $a = new A; $s = serialize($a); - // store $s somewhere where page2.php can find it. + // shranimo $s nekam, kjer ga bo page2.php lahko nasla. $fp = fopen("store", "w"); fputs($fp, $s); fclose($fp); page2.php: - // this is needed for the unserialize to work properly. + // to je potrebno za pravilno delovanje funkcije unserialize. include("classa.inc"); $s = implode("", @file("store")); $a = unserialize($s); - // now use the function show_one() of the $a object. + // sedaj lahko uporabimo funkcijo show_one() objekta $a. $a->show_one(); ]]> </programlisting> </informalexample> <para> - If you are using sessions and use <function>session_register</function> - to register objects, these objects are serialized automatically - at the end of each PHP page, and are unserialized automatically on - each of the following pages. This basically means that these objects - can show up on any of your pages once they become part of your - session. + Če uporabljate seje in uporabljate funkcijo + <function>session_register</function> za registracijo objektov, bodo + objekti avtomatsko serializirani na koncu PHP strani, in seveda avtomatsko + odserializirani na vsaki naslednji strani. To nasplošno pomeni, da se + lahko ti objekti pojavljajo na vsaki strani, ko so del vaše seje. </para> <para> - It is strongly recommended that you include the class - definitions of all such registered objects on all of your - pages, even if you do not actually use these classes on all - of your pages. If you don't and an object is being - unserialized without its class definition being present, it - will lose its class association and become an object of class - <literal>stdClass</literal> without any functions available - at all, that is, it will become quite useless. + Zelo priporočljivo je, da vključite definicije + vseh tako registriranih objektov na vseh straneh, čeprav + mogoče kakšnega ne uporabljate na vsaki strani. + Če to ne naredite in da se objekt odserializira brez + definicije svojega razreda, bo izgubil vse asociacije z razredom in + bo postal objekt razreda <literal>stdClass</literal> brez funkcij. + Torej bo postal neuporaben. </para> <para> - So if in the example above $a became part of a session by - running <literal>session_register("a")</literal>, you should - include the file <literal>classa.inc</literal> on all of your - pages, not only page1.php and page2.php. + Torej če v zgornjem primeru $a postane del seje z + uporabo funkcije <literal>session_register("a")</literal>, + bi morali vključiti datoteko <literal>classa.inc</literal> v + vse vaše strani, ne samo na strani page1.php in page2.php. </para> </sect1> <sect1 id="language.oop.magic-functions"> - <title>The magic functions <literal>__sleep</literal> and <literal>__wakeup</literal></title> + <title>Posebne funkcije <literal>__sleep</literal> in <literal>__wakeup</literal></title> <para> - <function>serialize</function> checks if your class has a function with - the magic name <literal>__sleep</literal>. If so, that function is - being run prior to any serialization. It can clean up the object - and is supposed to return an array with the names of all variables - of that object that should be serialized. + Funkcija <function>serialize</function> preveri ali vaš razred + vsebuje funkcijo s posebnim imenom <literal>__sleep</literal>. Če + ta obstaja, jo bo funkcija <function>serialize</function> klicala pred + serializacijo. Funkcija naj bi očistila objekt in naj bi vrnila + tabelo z vsemi imeni spremenljivk, ki naj bojo serializirane. </para> <para> - The intended use of <literal>__sleep</literal> is to close any - database connections that object may have, committing pending - data or perform similar cleanup tasks. Also, the function is - useful if you have very large objects which need not be - saved completely. + Namenjena uporaba <literal>__sleep</literal> je, da zapremo vse + povezave na baze, ki jih ta objekt ima, zapisati vse čakajoče + podatke ali kaksne podobne naloge. Pravtako je funkcija uporabna, ko imate + zelo velike razrede in ni potrebno shranjevati celih razredov. </para> <para> - Conversely, <function>unserialize</function> checks for the - presence of a function with the magic name - <literal>__wakeup</literal>. If present, this function can - reconstruct any resources that object may have. + Nasprotno, pa funkcija <function>unserialize</function> preveri + ali obstaja funkcija s posebnim imenom <literal>__wakeup</literal>. + Če je ta prisotna, lahko funkcija rekonstruira vse vire podatkov, ki + jih je ta objekt imel. </para> <para> - The intended use of <literal>__wakeup</literal> is to - reestablish any database connections that may have been lost - during serialization and perform other reinitialization - tasks. + Namenjena uporaba <literal>__wakeup</literal> je, da ponovno + vzpostavi vse povezave na baze, ki so bile izgubljene med + serializacijo in da opravi druge reinitializacijske naloge. </para> </sect1> <sect1 id="language.oop.newref"> - <title>References inside the constructor</title> + <title>Reference znotraj konstruktorja</title> <para> - Creating references within the constructor can lead to confusing - results. This tutorial-like section helps you to avoid problems. + Ustvarjanje reference znotraj konstruktorja lahko pripelje do + čudnih rezultatov. Naslednje informacije vam bodo pomagale + izogniti se temu problemu. <informalexample> <programlisting role="php"> @@ -738,12 +729,12 @@ { function Foo($name) { - // create a reference inside the global array $globalref + // ustvari referenco znotraj globalne tabele $globalref global $globalref; $globalref[] = &$this; - // set name to passed value + // nastavi name na podano vrednost $this->setName($name); - // and put it out + // izpisi to vrednost $this->echoName(); } @@ -763,88 +754,86 @@ </para> <para> - Let us check out if there is a difference between - <varname>$bar1</varname> which has been created using - the copy <literal>=</literal> operator and - <varname>$bar2</varname> which has been created using - the reference <literal>=&</literal> operator... + Pa poglejmo, če je razlika med <varname>$bar1</varname>, ki + je bila ustvarjena z <literal>=</literal> opratorjem in + <varname>$bar2</varname>, ki je bila ustvarjena z + referenčnim operatorjem <literal>=&</literal> ... <informalexample> <programlisting role="php"> <![CDATA[ -$bar1 = new Foo('set in constructor'); +$bar1 = new Foo('nastavljen v konstruktorju'); $bar1->echoName(); $globalref[0]->echoName(); -/* output: -set in constructor -set in constructor -set in constructor */ +/* izpis: +nastavljen v konstruktorju +nastavljen v konstruktorju +nastavljen v konstruktorju */ -$bar2 =& new Foo('set in constructor'); +$bar2 =& new Foo('nastavljen v konstruktorju'); $bar2->echoName(); $globalref[1]->echoName(); -/* output: -set in constructor -set in constructor -set in constructor */ +/* izpis: +nastavljen v konstruktorju +nastavljen v konstruktorju +nastavljen v konstruktorju */ ]]> </programlisting> </informalexample> </para> <para> - Apparently there is no difference, but in fact there is a - very significant one: <varname>$bar1</varname> and - <varname>$globalref[0]</varname> are _NOT_ referenced, they - are NOT the same variable. This is because "new" does not - return a reference by default, instead it returns a copy. + Na pogled ni razlike, vedar obstaja ena zelo pomembna: + <varname>$bar1</varname> in <varname>$globalref[0]</varname> + _NISTA_ referenčni in ista isti spremenljivki. To je zato, + ker "new" ne vrne reference, ampak vrne kopijo. <note> <simpara> - There is no performance loss (since PHP 4 and up use reference - counting) returning copies instead of references. On the - contrary it is most often better to simply work with copies - instead of references, because creating references takes some - time where creating copies virtually takes no time (unless none - of them is a large array or object and one of them gets changed - and the other(s) one(s) subsequently, then it would be wise to - use references to change them all concurrently). + Nič ne izgubimo na hitrosti (od PHP 4 naprej, uporablja + štetje referenc), če uporabljamo kopije namesto + referenc. Prav nasprotno, ponavadi je bolje preprosto delati z + kopijami, ker ustvarjanje referenc traja nekaj časa, za ustvarjanje + kopije pa ne porabimo praktično nič časa (razen, + če je to kaksna velika tabela ali objekt in spreminjamo enega + za drugim, kjer bi bilo pametneje uporabiti referenco, kjer bi spremenili + vse hkrati). </simpara> </note> - To prove what is written above let us watch the code below. + Za obrazložitev, si poglejte spodnjo kodo. <informalexample> <programlisting role="php"> <![CDATA[ -// now we will change the name. what do you expect? -// you could expect that both $bar1 and $globalref[0] change their names... -$bar1->setName('set from outside'); +// sedaj bomo zamenjali name. Kaj pricakujete? +// lahko bi pricakovali da se bosta $bar in $globalref[0] spremenila ... +$bar1->setName('nastavljen od zunaj'); -// as mentioned before this is not the case. +// kot je omenjeno zgoraj, se to ne zgodi. $bar1->echoName(); $globalref[0]->echoName(); /* output: -set from outside -set in constructor */ +nastavljen do zunaj +nastavljen v konstruktorju */ -// let us see what is different with $bar2 and $globalref[1] -$bar2->setName('set from outside'); +// poglejmo kaksna je razlika z $bar2 in $globalref[1] +$bar2->setName('nastavljen od zunaj'); -// luckily they are not only equal, they are the same variable -// thus $bar2->name and $globalref[1]->name are the same too +// na sreco niso samo enake, temvec tudi iste spremenljivke +// torej sta $bar2->name in $globalref[1]->name isti $bar2->echoName(); $globalref[1]->echoName(); -/* output: -set from outside -set from outside */ +/* izpis: +nastavljen od zunaj +nastavljen od zunaj */ ]]> </programlisting> </informalexample> </para> <para> - Another final example, try to understand it. + Še en primer, poskusite ga razumeti. <informalexample> <programlisting role="php"> @@ -854,7 +843,7 @@ function A($i) { $this->value = $i; - // try to figure out why we do not need a reference here + // poskusite ugotoviti zakaj ne potrebujemo reference tukaj $this->b = new B($this); } @@ -865,7 +854,7 @@ function echoValue() { - echo "<br>","class ",get_class($this),': ',$this->value; + echo "<br>","razred ",get_class($this),': ',$this->value; } } @@ -879,12 +868,12 @@ function echoValue() { - echo "<br>","class ",get_class($this),': ',$this->a->value; + echo "<br>","razred ",get_class($this),': ',$this->a->value; } } -// try to undestand why using a simple copy here would yield -// in an undesired result in the *-marked line +// poskusite ugotoviti zakaj tukaj navadna kopija nebi prinesla +// zeljenih rezultatov v vrstici oznaceni z * $a =& new A(10); $a->createRef(); @@ -899,13 +888,13 @@ $a->c->echoValue(); /* -output: -class A: 10 -class B: 10 -class B: 10 -class A: 11 -class B: 11 -class B: 11 +izpis: +razred A: 10 +razred B: 10 +razred B: 10 +razred A: 11 +razred B: 11 +razred B: 11 */ ]]> </programlisting>