Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Statyczne zmienne w klasie w stecz, Poprzedni obiekt widzi "nową zmienną"
JohnySpot
post
Post #1





Grupa: Zarejestrowani
Postów: 106
Pomógł: 0
Dołączył: 9.09.2003
Skąd: Włocławek

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


Chciałem dziś zrobić licznik obiektów pewnej klasy.
Zrobiłem wię klasę:
  1. <?php
  2. class test {
  3.  private $licznik;
  4.  
  5.  function __construct() {
  6.  $this->licznik++;
  7. echo 'Wywołano konstruktor. $licznik = '.$this->licznik;
  8.  }
  9.  
  10.  function __clone() {
  11. self::__construct();
  12.  }
  13.  
  14.  function show() {
  15. echo $licznik;
  16.  }
  17. }
  18.  
  19. $pierwsza = new test();
  20. $druga = clone $pierwsza;
  21. $pierwsza->show();
  22. ?>


Efekt był taki że pierwszy obiekt nadal widział jeden obiekt, drugi dwa. Rozumiem, że są to dwa odrębne obiekty i że podczas tworzenia drugiego z nich istniejąca wartość static ($licznik) została użyta do inicjalizacji zmiennej $licznik w obiekcie $drugi jednak czy dałoby się zrobić jakiś licznik "globalny", który działałby "wstecz" ?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
dr_bonzo
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


Cos bredzisz, wrzuc lepiej swoj kod (copy/paste, a nie przepisuj go).

Patrz na to:
  1. <?php
  2. class SomeClass
  3. {
  4. static private $counter = 0;
  5.  
  6. public function __construct()
  7. {
  8. self::$counter ++;
  9. }
  10.  
  11. public function getCounter()
  12. {
  13. return self::$counter;
  14. }
  15.  
  16. public function __clone()
  17. {
  18. print( "Cloning<br />n" );
  19. self::__construct();
  20. }
  21. }
  22.  
  23. function printCounter( $obj )
  24. {
  25. print( "Counter = " . $obj->getCounter() . "<br />n" );
  26. }
  27.  
  28. $a = new SomeClass();
  29. printCounter( $a );
  30.  
  31. $b = new SomeClass();
  32. printCounter( $b );
  33.  
  34. $c = new SomeClass();
  35. printCounter( $c );
  36.  
  37.  
  38.  
  39.  
  40. $cloned = clone $a;
  41. printCounter( $cloned );
  42.  
  43.  
  44. printCounter( $a );
  45. ?>

Wynik:
Kod
Counter = 1<br />
Counter = 2<br />
Counter = 3<br />
Cloning<br />
Counter = 4<br />
Counter = 4<br />
Go to the top of the page
+Quote Post

Posty w temacie


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: 14.10.2025 - 12:05