06/01_klonovanie2.php
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">
2 <html>
3 <head>
4 <meta http-equiv="Author" content="Imrich BURANSKY" />
5 <meta http-equiv="Content-Type" content="text/html; charset=Windows-1250" />
6 <title>Klonovanie 2</title>
7 </head>
8 <body>
9 <div>
10 <h2>Klonovanie 2</h2>
11 <?php
12
13 class CA
14 {
15 public $x;
16 public function __construct($hodnota)
17 {
18 $this->x=$hodnota;
19 }
20 //public function __clone ()
21 public function Klon ()
22 {
23 return clone($this);
24 }
25 }
26
27 echo "<h3>Priradenie</h3>
28 ";
29 $A1 = new CA(111);
30 $A2 = $A1;
31 $A2->x = 333; // zmenim hodnotu
32 echo "\$A1->x je $A1->x<br />\n"; // $A1->x je 333
33 echo "\$A2->x je $A2->x <br />\n"; // $A2->x je 333
34
35 echo "<h3>Dva objekty</h3>
36 ";
37 $A1 = new CA(111);
38 $A2 = new CA(222);
39 $A2->x = 333; // zmenim hodnotu
40 echo "\$A1->x je $A1->x<br />\n"; // $A1->x je 111
41 echo "\$A2->x je $A2->x <br />\n"; // $A2->x je 333
42
43 echo "<h3>Klonovanie</h3>
44 ";
45 $A1 = new CA(111); // Vytvorím objekt
46 $A1->x = 333; // Používam ho
47 // Podla pôvodnych zdrojov objekt mal mat metodu __clone
48 // ale ta asi nebola implementovana, lebo nasledujuci prikaz vedie k chybe
49 // $A2 = $A1->__clone(); // PHP Fatal error: Cannot call __clone() method on objects - use 'clone $obj' instead
50 // Napadne nás vytvoriť si v triede CA funkciu __clone, ale tým sa uvedená "osudná" chyba neodstráni.
51 // $A2 = $A1->__clone(); // PHP Fatal error aj ked je implementovaná funkcia __clone
52 // Môžeme si však urobiť svoju funkciu Klon
53 $A2 = $A1->Klon(); // Získam jeho kópiu
54 $A2->x += 666; // Modifikujem kópiu
55 echo "\$A1->x je $A1->x<br />\n"; // $A1->x je 333
56 echo "\$A2->x je $A2->x <br />\n"; // $A2->x je 999
57 ?>
58 <!-- *** Výsledok ***
59
60 Priradenie
61 $A1->x je 333
62 $A2->x je 333
63
64 Dva objekty
65 $A1->x je 111
66 $A2->x je 333
67
68 Klonovanie
69 $A1->x je 333
70 $A2->x je 999
71
72 -->
73 </div>
74 </body>
75 </html>