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>

« Späť