unserialize na obiekcie wewnatrz jego metody?how |
unserialize na obiekcie wewnatrz jego metody?how |
5.08.2008, 14:45:32
Post
#1
|
|
Grupa: Zarejestrowani Postów: 19 Pomógł: 1 Dołączył: 3.08.2008 Skąd: Radom Ostrzeżenie: (0%) |
Czy można uzyskać dostęp do całej klasy, wewnątrz jej własnej metody? Chciałbym wczytać klase obsługującą sesje, wydaje mi się, że najpierw wołam session_start(), później wczytuje? Czy taka klasa może się sama załadować i zastąpić, tą zachowaną w sesji? $this=unserialize($class) nie działa.
jaśniej się nie wyraźę, to max moich zdolności lexykalnych Może kod:
Dzięki! Edit (05-08-2008): Wygrzebałem odpowiedź do tego problemu, wiec odpisuje na swojego posta w celu info. Domyślam się dlaczego nikt mi ni odpisał. Pewnie jest wielu sfrustrowanych, bo musieli przepisać lub poprawić skrypty napisane na php4: W php5 $this już nie jest "mutable". Nie można go do niego przypisać innego obiektu tej samej klasy. Wogóle, że dało się w php4, to był przypadek, bo nigdy celowo nie zaimplementowano takiego przypisania i nie zostało ono udokumentowane. Podkreśla to bug-eliminator na stronie: http://bugs.php.net/bug.php?id=27659 . Dowcipy w kontekscie: Cytat This works in php 4. Perhaps this is a feature change but I could not find a reference to any alternatives so I am submitting a bug just in case. ...to ze strony bug-reprot... Cytat There is a _LOT_ of code out there using that. Metabase among others. Is there an alternative? This could be a huge problem if there is none. ... How Silly. We used $this for just about every result set in a db query. We have like a hundred applications. I just ran a sript on our whole htdocs directory and changed them all to $result. ... a njfajniejsze: Cytat Actually this is expected behavior. We explicitly decided to have $this being readonly because of interna problems with the new engine. ...to akurat od szefa wszyskich szewow. Przykładowe workaround'y: Oto potencjalne rozwiązanie. Tam gdzie chcesz przypisać coś do $this, zrób tak:
Albo, odserializowując dane sessji:
Teraz jest wybór: raz - oddelegowanie każdej metody, która musi zostać oddelegowana. Więc, $this przydałaby się metoda dla każdej metody w $Object. Każda z metod mogłaby przypominać coś jak to:
Jeden workarołnd jest w pierwszym poście, ale można go jeszcze ulepszyć:
Jeszcze jest coś z użyciem __set(), __get(), __call()... Jeśli ktoś na jakie lepsze obejście to proszę, temat otwarty. Jeszcze jak to sie robi w osCommerce: http://kb.siteground.com/article/oscommerc...ssign_this.html </a href=index.php> Ten post edytował php1983 5.08.2008, 14:47:25 -------------------- Anti-loyal: xp; ubuntu; c++; asm; php 5.2; mysql 5.1; apache 2.2; vs '08 con vs.php; Zend S.
|
|
|
5.08.2008, 15:54:21
Post
#2
|
|
Grupa: Zarejestrowani Postów: 793 Pomógł: 32 Dołączył: 23.11.2006 Skąd: Warszawa Ostrzeżenie: (0%) |
@php1983
Wydaje mi się że coś po prostu kombinujesz, w Java nie ma takiego czegoś a żyją. Powiedz co tak na prawdę chcesz osiągnąć, bo widzę tą klasę niby do obsługi sesji, ale nie widzę potrzeby takiej serializacji. Do tego: Cytat When serializing objects, PHP will attempt to call the member function __sleep prior to serialization. This is to allow the object to do any last minute clean-up, etc. prior to being serialized. Likewise, when the object is restored using unserialize() the __wakeup member function is called. Moim zdaniem powinieneś zapisywać tylko dane, do tego te dane nie powinny stanowić części tego obiektu. Tak na prawdę większość problemów z "niemożliwością" jest problemami z planowaniem jak ma to funkcjonować. -------------------- Algorytmy w PHP, czy ktoś o tym słyszał?
Dlaczego tak mało kobiet programuje? ponieważ nie zajmują się głupotami. |
|
|
5.08.2008, 22:25:02
Post
#3
|
|
Grupa: Zarejestrowani Postów: 19 Pomógł: 1 Dołączył: 3.08.2008 Skąd: Radom Ostrzeżenie: (0%) |
Mam nadzieje, że można tu po angielsku, bo nie chciało mi się wszystkiego tłumaczyć. Próbowałem postawić propela, nie spałem całą noc, ale to chyba nie na ten temat. Dzięki za fragment manuala, rozumiem, że niedouczony jestem.
Chce, żeby ta klasa od sesji, zchowywała wszystkie potrzebne klasy, było by dobrze, żeby iamogła zapamiętać w sesjii swoje własne ustawienia, a nie chce pisać jeszcze jednej klasy do obsługi klasy obsługującej sesje. -------------------- Anti-loyal: xp; ubuntu; c++; asm; php 5.2; mysql 5.1; apache 2.2; vs '08 con vs.php; Zend S.
|
|
|
5.08.2008, 22:35:03
Post
#4
|
|
Grupa: Zarejestrowani Postów: 793 Pomógł: 32 Dołączył: 23.11.2006 Skąd: Warszawa Ostrzeżenie: (0%) |
A próbowałeś wykorzystać session_set_save_handler()?
-------------------- Algorytmy w PHP, czy ktoś o tym słyszał?
Dlaczego tak mało kobiet programuje? ponieważ nie zajmują się głupotami. |
|
|
6.08.2008, 05:18:41
Post
#5
|
|
Grupa: Zarejestrowani Postów: 19 Pomógł: 1 Dołączył: 3.08.2008 Skąd: Radom Ostrzeżenie: (0%) |
Tak, tylko w innym niż ten celu. A czymożna zarejestrować funkcje obsługi sesji, które są metodami klasy do obsługi sesji?
-------------------- Anti-loyal: xp; ubuntu; c++; asm; php 5.2; mysql 5.1; apache 2.2; vs '08 con vs.php; Zend S.
|
|
|
6.08.2008, 08:49:40
Post
#6
|
|
Grupa: Zarejestrowani Postów: 793 Pomógł: 32 Dołączył: 23.11.2006 Skąd: Warszawa Ostrzeżenie: (0%) |
Jak zawsze jak czegoś szukam znów w manual'u to nie znajduję:]
A zamiast nazwy funkcji przekazujesz
-------------------- Algorytmy w PHP, czy ktoś o tym słyszał?
Dlaczego tak mało kobiet programuje? ponieważ nie zajmują się głupotami. |
|
|
Wersja Lo-Fi | Aktualny czas: 26.04.2024 - 07:26 |