Ben kurulum için bir yol hatırlamak görünüyor __destruct
bu döngüsel başvurular en kısa sürede dış nesne kapsam dışına denk olarak temizlenmelidir olacağını sağlayacak şekilde bir sınıf için. Ancak, inşa basit bir test bu beklediğimden gibi / ümit davranmak olmadığını belirtmek gibi görünüyor.
Dıştaki nesne kapsam dışına düştüğünde PHP doğru onları temizlemek ki böyle bir şekilde kurulum benim sınıfları için bir yolu var mı?
Ben bu kodu yazmak için alternatif yollar arıyor değilim, ben bu yapılabilir olup olmadığını arıyorum, ve eğer öyleyse, nasıl? Ben genellikle dairesel başvurular mümkünse bu tür önlemek için deneyin.
class Bar {
private $foo;
public function __construct($foo) {
$this->foo = $foo;
}
public function __destruct() {
print "[destroying bar]\n";
unset($this->foo);
}
}
class Foo {
private $bar;
public function __construct() {
$this->bar = new Bar($this);
}
public function __destruct() {
print "[destroying foo]\n";
unset($this->bar);
}
}
function testGarbageCollection() {
$foo = new Foo();
}
for ( $i = 0; $i < 25; $i++ ) {
echo memory_get_usage() . "\n";
testGarbageCollection();
}
Çıktı şuna benzer:
60440
61504
62036
62564
63092
63620
[ destroying foo ]
[ destroying bar ]
[ destroying foo ]
[ destroying bar ]
[ destroying foo ]
[ destroying bar ]
[ destroying foo ]
[ destroying bar ]
[ destroying foo ]
[ destroying bar ]
Ne için umduğu:
60440
[ destorying foo ]
[ destorying bar ]
60440
[ destorying foo ]
[ destorying bar ]
60440
[ destorying foo ]
[ destorying bar ]
60440
[ destorying foo ]
[ destorying bar ]
60440
[ destorying foo ]
[ destorying bar ]
60440
[ destorying foo ]
[ destorying bar ]
UPDATE:
Orada PHP> 5.3 ile ilgili bu soruya birkaç büyük cevaplar, ama ben PHP