Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Identyfikacja i hashowanie obiektow
Forum PHP.pl > Forum > PHP
squid
Witam,
jak zhashowac obiekty ale nie uzywajac serializacji? Myslalem o rozpoznawaniu klasy i danych z obiektu, taki mix bylby w miare unikalny ale to torche za malo.

Jakies propozycje?
thornag
Nie rozumiem idei hashowania obiektu ?

Jak go zahashujesz to juz go ponownie nie uzyjesz, takze nie rozumiem koncepcji smile.gif

Moze chodzi Ci o cos innego, postaraj sie opisac sytuacje jasniej, na zasadzie co masz i co chcesz z tego osiagnac.
squid
Nie chcem go ponownie uzyc chce go odroznic od innego obiektu tej samej klasy z podobnymi danymi.

Zamierzam tego uzyc w systemie keszowania, potrzebuje miec unikalne klucze dla kazdego obiektu odpada wiec automatyczne numerowanie tablic $tab[] bo wtesy rozne obiekty moga miec ten sam klucz w roznych wywolaniach/sesjach skryptu.
thornag
No to do tego jest operator === ktory soprawdzi czy to te same instancje obiektu czy inne.


----------edit
No to go hashuj sha1/md5 + unique_id + time i juz masz unikalna mieszanke biggrin.gif

P.S. Na przyszlosc jesli robisz taka znaczaca edycje posta to napisz co zedytowales bo pozniej jak ktos czyta to np moja wypowiedz pod Twopim postem wydaje sie kompletnie bez sensu i nie na miejscu.
squid
nie moge uzyc ani operatora porownania ani f-cji in_array poniewaz niekoniecznie dysponuje wszystkimi instancjami obiektow.
Dany obiekt byl stworzony kiedys w przeszlosci i dzialanie jego metod dalo jakis wynik teraz jest powolany do zycia nowy obiekt i chce sprawdzic czy ten nowy musi wykonywac jakies operacje bo moze byly juz wywolywane kiedys.

Cytat(thornag @ 25.07.2007, 11:42:06 ) *
----------edit
No to go hashuj sha1/md5 + unique_id + time i juz masz unikalna mieszanke biggrin.gif

no to jest super rozwiazanie ale klucz musi tez byc powtarzalny a z time () nie jest sad.gif
thornag
No to wywal to time tam i unique Id i go zahashuj po prostu sha1 czy czyms, mozliwosc przypadkowego powtorzenia jest naprawde bardzo mala dla sha1.
squid
sek w tym ze sha1 przyjmuje jako parametr string a nie object choc nie sprawdzalem co sie stanie jak przekazesz tam object.

mimo wszystko dzieki za pomoc
thornag
Zrobilem maly test i sha1 bez serializacji rzeczywiscie nic nie da.

  1. <?php
  2. class A {
  3. var $a;
  4. var $b;
  5. }
  6.  
  7. $A = new A();
  8. $A->a = 11;
  9. $A->b = 12;
  10.  
  11. $B = new A();
  12. $B->a = 12;
  13. $B->b = 11;
  14.  
  15. echo '<br><br>Bez serializacji: <br><br>';
  16. echo sha1($B);
  17. echo '<br>';
  18. echo sha1($A);
  19. echo '<br><br>>';
  20.  
  21. echo 'Obiekty zserializowany: <br><br>';
  22. echo sha1(serialize($B));
  23. echo '<br>';
  24. echo sha1(serialize($A));
  25.  
  26. echo '<br><br>Wersja PHP: 4.4.3RC2-dev';
  27. ?>


Output:

Kod
Bez serializacji:

2883f191bc5ebfdc16c0813eff659b35363ea69b
2883f191bc5ebfdc16c0813eff659b35363ea69b

>Obiekty zserializowany:

5ef183cc1071c9670c0aa497b353fcf82f1464ea
a13d0feb6c841fcd2dda23ec46dfc151e984b36c

Wersja PHP: 4.4.3RC2-dev


Takze trzeba bedzie kombinowac inaczej jesli nie chcesz serializowac smile.gif
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.