Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Identyfikowanie instancji obiektów
EuReKa
post 24.09.2007, 20:23:00
Post #1





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 22.07.2007

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


Czy w PHP jest jakiś prosty sposób identyfikacji instancji obiektów?
Mały przykład ilustrujący problem:
  1. <?php
  2. class foo
  3. {
  4.  
  5. }
  6.  
  7. $f = new foo;
  8. $g = new foo;
  9.  
  10. $h = $g;
  11.  
  12.  
  13. // $h jest referencją $g. To jest ta sama instancja.
  14. var_dump($h == $g);
  15. // $g i $f to różne instancje.
  16. var_dump($g == $f);
  17. ?>

Wynik uruchomienia powyższego kodu jest następujący:
Kod
object(foo)#1 (0) {
}
object(foo)#2 (0) {
}
object(foo)#2 (0) {
}
bool(true)
bool(true)

Jak widać z serii pierwszych trzech var_dump() PHP odróżnia instancje (identyfikator przy #) jednak nie sposób zrobić porównując instancje. Wynika to z tego, że PHP porównuje obiekty po typie i po zmiennych klasowych (których w przypadku przykładowej klasy nie ma).
Rozwiązałem już problem lecz wolałbym wykorzystać jakiś prostszy sposób.

Czy jest jakaś prosta metoda która identyfikowałaby instancje obiektów jednoznacznie?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
revyag
post 24.09.2007, 20:33:25
Post #2





Grupa: Przyjaciele php.pl
Postów: 2 258
Pomógł: 16
Dołączył: 21.09.2004
Skąd: Kielce

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


  1. <?php
  2. if($f instanceof foo && $g instanceof foo) {
  3. }
  4. ?>


--------------------
-------------

------
Go to the top of the page
+Quote Post
EuReKa
post 24.09.2007, 20:54:23
Post #3





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 22.07.2007

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


  1. <?php
  2. class foo
  3. {
  4.  
  5. }
  6.  
  7. $f = new foo;
  8. $g = new foo;
  9.  
  10. $h = $g;
  11.  
  12. // Różne instancje
  13. var_dump($f instanceof foo && $g instanceof foo);
  14. // Ta sama instancja
  15. var_dump($g instanceof foo && $h instanceof foo);
  16. ?>

zwróci dwa razy true;
instanceof sprawdza typ obiektu (i tylko typ w przeciwieństwie do ==).
Problem jest gdy obie instancje są takie same, tj. tego samego typu i mające te same właściwości. Taki właśnie przypadek jest przy $f i $g.
Go to the top of the page
+Quote Post
Sedziwoj
post 24.09.2007, 21:43:39
Post #4





Grupa: Zarejestrowani
Postów: 793
Pomógł: 32
Dołączył: 23.11.2006
Skąd: Warszawa

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


  1. <?php
  2. class foo
  3. {
  4.  
  5. }
  6.  
  7. $f = new foo;
  8. $g = new foo;
  9.  
  10. $h = $g;
  11.  
  12. // Różne instancje
  13. var_dump($f === $g );
  14. // Ta sama instancja
  15. var_dump($g ===$h);
  16. ?>



http://www.php.net/manual/en/language.oop5...-comparison.php


--------------------
Algorytmy w PHP, czy ktoś o tym słyszał?
Dlaczego tak mało kobiet programuje? ponieważ nie zajmują się głupotami.
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 13.06.2025 - 20:57