2016-10-08 6 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

try set to 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"); 
    }); 
    } 
}