Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> unserialize na obiekcie wewnatrz jego metody?how
php1983
post
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 (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)

Może kod:

  1. <?php
  2. class o_Csesion{
  3. public $counter;
  4.  
  5. function __construct(){
  6. $this->counter=0;
  7. }
  8. public function start(){
  9. }
  10. public function end(){
  11. }
  12. function save(){
  13. $_SESSION['o_Csesion']=serialize($this);
  14. }
  15. function restore(){
  16. if(isset($_SESSION['o_Csesion'])){
  17. $temp=unserialize($_SESSION['o_Csesion']);
  18. $this->counter=$temp->counter;
  19. //MERITUM
  20. //a jakby sie dało tak:
  21. //$this=unserialize($_SESSION['o_Csesion']);
  22. //
  23. //ale sie nie da?
  24. //
  25.  
  26. }
  27. echo &#092;"<a href=index.php>wywolano start tej sessji: \".++$this->counter
  28. .&#092;" razy.\";
  29. }
  30. }
  31. ?>


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:

  1. <?php
  2. $this->Object = new Whatever();
  3. ?>


Albo, odserializowując dane sessji:

  1. <?php
  2. $this->Session = unserialize($data);
  3. ?>


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:

  1. <?php
  2. function nameOfFunction()
  3. {
  4.  return $this->Object->nameOfFunction();
  5. }
  6. ?>



Jeden workarołnd jest w pierwszym poście, ale można go jeszcze ulepszyć:

  1. <?php
  2. $this = $foo;
  3.  
  4. will something like this:
  5.  
  6. foreach (get_object_vars($foo) as $key => $value)
  7. $this->$key = $value;
  8. ?>


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

  1. <?php
  2. osCommerce 2.2-MS2 gets same error when open admin folder. Error in file
  3. includes/classes/upload.php. 
  4. On Windows/IIS5/ISAPI.
  5.  
  6. Resolwed by commenting:
  7. // self destruct
  8. // $this = null;
  9.  
  10. Worked at PHP4
  11.  
  12. Good Luck!
  13. ?>
</a href=index.php>

Ten post edytował php1983 5.08.2008, 14:47:25
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: 7.10.2025 - 13:39