2016-10-08 3 views
1

Ich bin ziemlich neu PHP OOP zu verwenden und versuchen, die folgenden:OOP entfernen Klasseninstanz

$this->array = new array(); 
$this->array[1] = new myClass($UniqueName); 

Innerhalb myClass habe ich eine Schleife eine Nachricht an die Konsole sendet alle 5 Sekunden, um den eindeutigen Namen angezeigt werden. Während die Anwendung läuft, werden neue Instanzen der myClass erstellt (1, 2, 3, 4, etc ..), ältere werden irrelevant und sollten entfernt werden.

Wenn ich ein Array-Objekt lösche, sendet die Schleife aus dieser Klasse weiterhin Nachrichten an die Konsole.

Meine Sorge ist, dass die Klasse nicht wirklich verschwendet Ressourcen verschwendet. Was die Schleife betrifft, könnte ich sie manuell abbrechen, bevor ich die Unset-Funktion ausführte, aber es scheint, als ob sie mein Problem aus der Sicht versteckt.

Hoffentlich macht das Sinn und jemand kann mir helfen zu verstehen, wenn dies möglich ist.

+1

können Sie den relevanten Code von 'myClass' posten? – Matteo

+0

try auf null setzen $ this-> array [1] = null – Matteo

+0

Wenn Sie alle Verweise auf das Objekt entfernen, bereinigt der Garbage Collector automatisch für Sie. Das heißt, es ist wirklich schwer zu sagen, was Sie ohne den Code tun. – PeeHaa

Antwort

0

Lösung für mein eigenes Problem. Hier ist eine abgespeckte Version, mit der ich gerade teste. Das Problem ist mit dem Timer in myClass. Es scheint, dass die Klasse nicht zerstört wird, weil der Timer noch läuft. Das war nur Wunschdenken von mir, dass es auch enden würde. Das Entfernen des Timers ermöglicht das Zerstören.

class myClass extends DefaultConfig { 

    public $fileName; 
    public $logLevel; 
    public $loop; 
    public $config; 
    public $db; 


    function __construct ($loop, $db, $config) { 
    $this->fileName = 'myClassObject'; 
    $this->logLevel = 3; 
    $this->loop = $loop; 
    $this->config = new Config($config); 
    $this->HB(); 
    } 


    function __destruct() { 
     print "Destroying " . $this->fileName . "\n"; 
    } 
    public function HB(){ 
    $this->loop->addPeriodicTimer(1, function($timer){ 
     $this->Logging(3, $this->fileName, $this->logLevel, "Server Message"); 
    }); 
    } 
}