2016-10-08 8 views
1

私はPHP OOPを使用して、次のようにしようとするかなり新しいです:MyClassの内OOP削除クラスのインスタンス

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

私はコンソールに一意の名前を表示する5秒ごとにメッセージを送信するループを持っています。アプリケーションが実行されている間、myClassの新しいインスタンスが作成されます(1,2,3,4など)。古いものは無関係になり、削除する必要があります。

配列オブジェクトを設定解除すると、そのクラスのループはコンソールにメッセージを送信し続けます。

unset($this->array[1]) 

私の懸念は、クラスが実際にリソースを無駄にしていないことです。ループについては、私はunsetを実行する前に手動でキャンセルすることができますが、それは私の問題を隠すようなものです。

うまくいけば、これは意味があり、可能であれば誰かが私に理解を助けることができます。

+1

「myClass」の関連コードを投稿できますか? – Matteo

+0

nullに設定しようとしました '$ this-> array [1] = null' – Matteo

+0

オブジェクトへの参照をすべて削除すると、ガベージコレクタによって自動的にクリーンアップされます。それは、あなたがコードなしで何をしているのかを言うことは本当に難しいと言いました。 – PeeHaa

答えて

0

私自身の問題に対する解決策。ここでは私がテストしているバージョンを取り除いたものです。問題は、myClass内のタイマーです。タイマーがまだ動いているので、クラスが破壊されないようです。これはちょうど私の側でそれがまた終わるという希望的思考でした。タイマーを削除すると、破壊が発生します。

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"); 
    }); 
    } 
} 
関連する問題