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
Существует способ самоуничтожения объекта :
Используйте массив $GLOBALS
, чтобы найти в нем свой экземпляр, затем используйте unset()
. Имейте в виду, что unset()
не вызывает автоматически магический метод __destruct()
все время...
В документации PHP есть такая заметка (см. unset()
), но она не объясняет, когда именно unset()
не вызывает метод __destruct()
.
И у меня было такое специфическое поведение:
Я делаю a :
unset($myInstance);
$myInstance = clone $otherInstance;
И сначала вызывается __constructor
, затем __destruct()
. Или я бы хотел, чтобы __destruct()
вызывался первым, потому что unset()
находится перед клоном...
Теперь я застрял с этим...
Nicolas.
Если метод вызывается в контексте объекта, то должна быть хотя бы одна ссылка на этот объект. А поскольку php удаляет только недоступные объекты, ответ: нет.