Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Identyfikowanie instancji obiektów
Forum PHP.pl > Forum > PHP > Object-oriented programming
EuReKa
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?
revyag
  1. <?php
  2. if($f instanceof foo && $g instanceof foo) {
  3. }
  4. ?>
EuReKa
  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.
Sedziwoj
  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
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.