O ile wiem (a to bardzo mało), istnieją dwa sposoby:
$var = new object()
Następnie:
// Method 1: Set to null
$var = null;
// Method 2: Unset
unset($var);
Inna lepsza metoda? Czy ja tu rozdzielam włosy?
php
object
destructor
destroy
PandemoniumSyndicate
źródło
źródło
new
raz, to musi wykorzystaćdelete
tylko raz. To nie jest prawda w PHP? Czy istnieje automatyczne usuwanie elementów bezużytecznych, gdy obiekt nie jest już potrzebny?unset()
usuwa odniesienie do obiektu?Poręczny post wyjaśniający kilka nieporozumień na ten temat:
Nie wzywaj Destructora jawnie
Obejmuje to kilka nieporozumień dotyczących działania destruktora. Wyraźne wywołanie go nie zniszczy twojej zmiennej, zgodnie z dokumentacją PHP5:
Powyższy post stwierdza, że ustawienie zmiennej na null może działać w niektórych przypadkach, o ile nic innego nie wskazuje na przydzieloną pamięć.
źródło
Krótka odpowiedź: potrzebne są oba.
Wydaje mi się, że podano właściwą odpowiedź, ale minimalną. Tak, generalnie unset () jest najlepsze dla „szybkości”, ale jeśli chcesz natychmiast odzyskać pamięć (kosztem procesora), powinieneś użyć null.
Podobnie jak inni wspomnieli, ustawienie na null nie oznacza, że wszystko jest odzyskane, możesz mieć obiekty pamięci współdzielonej (niesklonowane), które zapobiegną zniszczeniu obiektu. Co więcej, jak powiedzieli inni, i tak nie możesz „niszczyć” obiektów w sposób jawny, więc i tak nie powinieneś próbować tego robić.
Musisz dowiedzieć się, który z nich jest dla Ciebie najlepszy. Możesz także użyć __destruct () dla obiektu, który będzie wywoływany w stanie nieustawionym lub zerowym, ale powinien być używany ostrożnie i, jak powiedzieli inni, nigdy nie powinien być wywoływany bezpośrednio!
widzieć:
http://www.stoimen.com/blog/2011/11/14/php-dont-call-the-destructor-explicitly/
Jaka jest różnica między przypisywaniem wartości NULL i unset?
źródło
To prosty dowód na to, że nie możesz zniszczyć obiektu, możesz tylko zniszczyć łącze do niego.
zwroty
Zobacz to w akcji tutaj: https://eval.in/1054130
źródło
$var2
czego było odniesienie$var
. Teraz również niszczysz$var
i zakładając, że na obiekcie nie ma innych odniesień, gotowe.Może być w sytuacji, gdy tworzysz nowy obiekt mysqli.
$MyConnection = new mysqli($hn, $un, $pw, $db);
ale nawet po zamknięciu obiektu
$MyConnection->close();
jeśli użyjesz
print_r()
do sprawdzenia zawartości$MyConnection
, pojawi się błąd jak poniżej:w takim przypadku nie możesz użyć,
unlink()
ponieważunlink()
będzie wymagać ciągu nazwy ścieżki, ale w tym przypadku$MyConnection
jest to Object.Masz więc inny wybór ustawienia jego wartości na null:
$MyConnection = null;
teraz wszystko idzie dobrze, jak się spodziewałeś. Nie masz żadnej zawartości wewnątrz zmiennej,
$MyConnection
a także wyczyściłeś obiekt mysqli.Zalecaną praktyką jest zamykanie Object przed ustawieniem wartości zmiennej na
null
.źródło
Poszedłbym bez ustawienia, ponieważ może to dać odśmiecaczowi lepszą wskazówkę, aby pamięć mogła być ponownie dostępna wcześniej. Uważaj, aby wszystko, co wskazuje obiekt, albo miało inne odwołania, albo zostało najpierw rozbrojone, albo naprawdę będziesz musiał poczekać na moduł odśmiecania pamięci, ponieważ wtedy nie będzie do nich dojść.
źródło