cvs: phpdoc-sl /language oop.xml
[email protected] ("Dejan Markic") Mon, 20 Jan 2003 18:27:04 -0000
| Newsgroups | php.doc.sl |
|---|---|
| Message-ID | <cvsdejan1043087224@cvsserver> |
dejan Mon Jan 20 13:27:04 2003 EDT
Modified files:
/phpdoc-sl/language oop.xml
Log:
Done. For now.
dejan-20030120132704.txt
(text/plain, 22.6 KB)
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>