Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] usuwanie obiektu
Forum PHP.pl > Forum > Przedszkole
ayeo
Witam!
Czy w PHP obiekt może usunąć się sam?
unset($this); nie działa biggrin.gif

Z manuala:
It is not possible to unset $this inside an object method since PHP 5.

A jak można to zrobić inaczej?
MMX3
A próbowałeś dopisać destruktor do klasy?
l0ud
Z tego co wiem, nie jest to możliwe. Zresztą... do czego byłoby Ci to potrzebne?
ayeo
@l0ud, do niczego nie jest mi to w sumie potrzebne. Pytam czysto hipotetycznie. unset($this); usuwa tylko referencję do tego obiektu. :/
Piniek
Obiekty usuwaj sie same ;] mozesz to zaobserowawac dodajac desruktor jest on wywolywany kiedy obiekt przestaje istniec wiec jest kasowany ;]
np :
  1. <?php
  2. class A {
  3. function __construct(){
  4. echo"jestem <br/>";
  5. }
  6. function __destruct(){
  7. echo "i już mnie nie ma";
  8. }
  9. }
  10. $new = new A();
  11. //wyświetli
  12. //jestem
  13. //juz mnie nie ma -- co oznacza ze destruktor został wywolany
  14. ?>

link
pyro
  1. <?php
  2.  
  3. class klaska
  4. {
  5.  
  6. public function wyswietl_tekst()
  7. {
  8. echo 'to jest jakistam tekst';
  9. } 
  10.  
  11. }
  12.  
  13. $a = new klaska();
  14. $a->wyswietl_tekst();
  15. unset($a);
  16.  
  17. if(!isset($a))
  18. {
  19. echo '<br />nie ma $a<br />'; 
  20. }
  21. else
  22. {
  23. echo '<br />mimowolnie $a nadal jest ;/ <br />';
  24. }
  25.  
  26. if(!$a->wyswietl_tekst())
  27. {
  28. echo 'nie mozna wyswietlic tekstu bo widocznie unset zadzialalo :)';
  29. }
  30.  
  31. // takie cos nie dziala?
  32.  
  33. ?>


bo u mnie unset zadzialalo tongue.gif
ayeo
Chodzi mi o usuwanie obiektu z jego wnętrza.
pyro
no to desctructorem, inaczej (tak mi sie wydaje) nie da
nevt
przy pewnych ograniczeniach - da się. zakładając, że wszystkie instancje obiektu przypisane są do jakichś zmiennych globalnych (a to częsta sytuacja), w metodzie kasującej można zastosować procedurę:
1. pobrać nazwę własnej klasy.
2. przeszukać tablicę globals i wyłuskać wszystkie wpisy które są instancjami naszej klasy.
3. przelecieć się po wszystkich pasujących funkcją unset()
4. po skasowaniu ostatniejinstancji obiekt zostaje zniszczony (wywołuje się destruktor - sprawdzałem).

powodzenia.
ayeo
@nevt, dziękuję bardzo za wskazówki! Pozdrawiam!
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.