PHP에서 사용할 수 있거나 먹을 수있는 객체가 있습니다. 어쨌든, 그것은 끝났어. 공용 메서드 useItem()
에 의해 호출되는 activate()
이라는 추상 보호 된 메서드가 있습니다.오브젝트 내의 소멸자 호출 PHP의 메소드
은 activate()
으로 전화를 걸어 자신을 파괴 할 수 있습니까? 그렇지 않다면 항목이 영구적으로 사라 졌는지 확인하는 가장 좋은 방법은 무엇입니까?
PHP에서 사용할 수 있거나 먹을 수있는 객체가 있습니다. 어쨌든, 그것은 끝났어. 공용 메서드 useItem()
에 의해 호출되는 activate()
이라는 추상 보호 된 메서드가 있습니다.오브젝트 내의 소멸자 호출 PHP의 메소드
은 activate()
으로 전화를 걸어 자신을 파괴 할 수 있습니까? 그렇지 않다면 항목이 영구적으로 사라 졌는지 확인하는 가장 좋은 방법은 무엇입니까?
원할 경우 간단히 설정 해제() 할 수 있습니다.
현실적으로 PHP에서 garbage collector or GC은 변수가 범위를 벗어나거나 참조가없는 경우 필요한 모든 작업을 수행합니다. 분명한 것은 GC가 PHP 5.3에서 주요한 재 작업을 수행했기 때문에 5.2.x를 사용하고 있다면 여전히 성능 문제가있을 수 있습니다. 만약 내가 제대로 이해하고
당신 같은이 : 물론
$obj = new MyClass();
$obj->useItem();
unset($obj);
//if there are cyclic references, the object won't be destroyed except
//in PHP 5.3 if the garbage collector is called
:이 경우
class AbstractMyClass {
abstract protected function activate();
public function useItem() {
//...
$this->activate();
//...
}
}
class MyClass extends AbstractMyClass { /* ... */ }
을, 아니, 짧은 useItem
를 호출 한 후 파괴되는 개체를 만들 수있는 방법이 없다 파괴 가능한 객체를 다른 객체로 캡슐화 할 수 있습니다.
class MyClass extends AbstractMyClass { /* ... */ }
class MyWrapper {
private $inner;
public function __construct($object) {
$this->inner = $object;
}
public function useItem() {
if ($this->inner === null)
throw new InvalidStateException();
$this->inner->useItem();
$this->inner = null;
}
}
$obj = new MyWrapper(new MyClass());
$obj->useItem();