Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> problem z kopiowaniem klasy
Teoria
post
Post #1





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 6.08.2007

Ostrzeżenie: (0%)
-----


  1. <?php
  2. class klasa
  3. {
  4. var $pole1;
  5. var $pole2;
  6. var $pole3;
  7. var $pole4;
  8. }
  9. $wojtek=new klasa();
  10. $wojtek->pole1='a';
  11. $wojtek->pole2='b';
  12. $wojtek->pole3='c';
  13. $wojtek->pole4='d';
  14.  
  15. $kopia=$wojtek; # kopiujemy.... CHYBA
  16.  
  17. ### OBIE ZMIENNE SA TAKIE SAME
  18. print_r($wojtek);
  19. echo "<br /><br />";
  20. print_r($kopia);
  21. echo "<br /><br />";
  22.  
  23. ### ZMIENIAMY WARTOSC KOPII
  24. $kopia->pole1='xxxx';
  25.  
  26. print_r($wojtek);
  27. echo "<br /><br />";
  28. print_r($kopia);
  29. echo "<br /><br />";
  30. ?>


i pytnie: co w linice 26 i 28 zostanie wydrukowane?

Odpowiedź: różnie!!!! (IMG:http://forum.php.pl/style_emoticons/default/blinksmiley.gif) (IMG:http://forum.php.pl/style_emoticons/default/sciana.gif)

WARIANT 1 na localhoscie:
klasa Object ( [pole1] => a [pole2] => b [pole3] => c [pole4] => d )

klasa Object ( [pole1] => xxxx [pole2] => b [pole3] => c [pole4] => d )


WARIANT 2 na serwerze:
klasa Object ( [pole1] => xxxx [pole2] => b [pole3] => c [pole4] => d )

klasa Object ( [pole1] => xxxx [pole2] => b [pole3] => c [pole4] => d )

Prawdziwe pytanie:
a ) Dlaczego tak się dzieje?
b ) jak 'skopiować' w takim razie tą zmienną, by 'wyrzucał' wariant 1?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
mike
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


Jakie wersje PHP masz na localhost i na serwerze?
Go to the top of the page
+Quote Post
Teoria
post
Post #3





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 6.08.2007

Ostrzeżenie: (0%)
-----


trochę mi głupio, bo akurat po napisaniu posta znalazłem odpowiedź na to... (a męczyłem się z tym pół dnia). Ale myślę że to będzie cenna informacja dla niektórych:

W PHP 4:
$obiekt1=$obiekt2 -> kopiuje
$obiekt1=&$obiekt2 -> tworzy referencje

W PHP 5:
$obiekt1=$obiekt2 -> tworzy referencje
$obiekt=clone($obiekt2) -> kopiuje

ALE... w manualu nie ma funkcji clone() (IMG:http://forum.php.pl/style_emoticons/default/exclamation.gif) !!
Go to the top of the page
+Quote Post
mike
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


Cytat(Teoria @ 21.08.2007, 17:28:37 ) *
ALE... w manualu nie ma funkcji clone() (IMG:http://forum.php.pl/style_emoticons/default/exclamation.gif) !!
Zabrzmiało jakbyś byl tego pewien (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
Classes and Objects (PHP 5) :: Object cloning


W sumie clone() nie ma. Jest __clone()
Go to the top of the page
+Quote Post
Teoria
post
Post #5





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 6.08.2007

Ostrzeżenie: (0%)
-----


hm... no to jestem o coś mądrzejszy (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Dzięki Mike za zainteresowanie.


---
Jo łelkom (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
~mike
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 18.09.2025 - 04:26