PHP: Уничтожить объект из объекта?

A.x является переменной класса и будет совместно использован через все экземпляры A, если конкретно не переопределено в экземпляре. B.x является переменной экземпляра, и каждый экземпляр B имеет свою собственную версию его.

я надеюсь, что следующий пример Python может разъясниться:


    >>> class Foo():
    ...     i = 3
    ...     def bar(self):
    ...             print 'Foo.i is', Foo.i
    ...             print 'self.i is', self.i
    ... 
    >>> f = Foo() # Create an instance of the Foo class
    >>> f.bar()
    Foo.i is 3
    self.i is 3
    >>> Foo.i = 5 # Change the global value of Foo.i over all instances
    >>> f.bar()
    Foo.i is 5
    self.i is 5
    >>> f.i = 3 # Override this instance's definition of i
    >>> f.bar()
    Foo.i is 5
    self.i is 3
13
задан hakre 3 July 2012 в 09:11
поделиться

3 ответа

Существует способ самоуничтожения объекта :

Используйте массив $GLOBALS, чтобы найти в нем свой экземпляр, затем используйте unset(). Имейте в виду, что unset() не вызывает автоматически магический метод __destruct() все время...

В документации PHP есть такая заметка (см. unset()), но она не объясняет, когда именно unset() не вызывает метод __destruct().

И у меня было такое специфическое поведение:

Я делаю a :

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

И сначала вызывается __constructor, затем __destruct(). Или я бы хотел, чтобы __destruct() вызывался первым, потому что unset() находится перед клоном... Теперь я застрял с этим...

Nicolas.

7
ответ дан 1 December 2019 в 23:15
поделиться

Если метод вызывается в контексте объекта, то должна быть хотя бы одна ссылка на этот объект. А поскольку php удаляет только недоступные объекты, ответ: нет.

12
ответ дан 1 December 2019 в 23:15
поделиться

Нет, не думаю. Но нужна ли вам такая вещь?

0
ответ дан 1 December 2019 в 23:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: