PHP: Destroy an object from within the object?
Asked Answered
C

2

14

Is there a way in PHP to destroy an object from within that same object?

Childress answered 12/9, 2009 at 8:59 Comment(3)
No, I don't think there is. But would you need such thing?Iq
@Christian the ability to destroy an object leis in the same place where the ability to create them - not inside the object itself.Pink
gave a "yes-and-here-is-how" answer to an essentially similar question here - https://mcmap.net/q/830107/-how-to-delete-a-php-object-from-its-classPink
F
7

There is a way to self destruct an object :

Use the $GLOBALS array to find your instance in it, then use unset(). Be aware that unset() does not automatically call the __destruct() magic method all the time...

There is such a note in this way (see the unset() documentation) in the PHP documentation, but it does not explain exactly when unset() does not call the __destruct() method.

And I had this specific behaviour :

I do a :

unset($myInstance);
$myInstance = clone $otherInstance;

And the __constructor is called first, then the __destruct(). Or I would like the __destruct() to be called first because unset() is before clone... I ma stuck with that now...

Nicolas.

Frawley answered 2/8, 2010 at 19:33 Comment(2)
Destructors are called on garbage collection or when the script terminates.Mestas
As hakre stated, until the $myInstance variable is out of scope and garbage collection picks it up, the destructor will not be called.Chasse
G
12

If a method is called in the object's context then there has to be at least one reference to that object. And since php only removes unreachable objects the answer is: no.

Gizmo answered 12/9, 2009 at 9:21 Comment(0)
F
7

There is a way to self destruct an object :

Use the $GLOBALS array to find your instance in it, then use unset(). Be aware that unset() does not automatically call the __destruct() magic method all the time...

There is such a note in this way (see the unset() documentation) in the PHP documentation, but it does not explain exactly when unset() does not call the __destruct() method.

And I had this specific behaviour :

I do a :

unset($myInstance);
$myInstance = clone $otherInstance;

And the __constructor is called first, then the __destruct(). Or I would like the __destruct() to be called first because unset() is before clone... I ma stuck with that now...

Nicolas.

Frawley answered 2/8, 2010 at 19:33 Comment(2)
Destructors are called on garbage collection or when the script terminates.Mestas
As hakre stated, until the $myInstance variable is out of scope and garbage collection picks it up, the destructor will not be called.Chasse

© 2022 - 2024 — McMap. All rights reserved.