我有一个可以在PHP中使用或者吃掉的东西。无论如何,它结束了。我有一个被称为activate()
的抽象受保护方法,该方法由公共方法useItem()
调用。在PHP的对象方法中调用析构函数
拨打activate()
后useItem()
有可能销毁吗?如果没有,确保物品永久消失的最佳方法是什么?
我有一个可以在PHP中使用或者吃掉的东西。无论如何,它结束了。我有一个被称为activate()
的抽象受保护方法,该方法由公共方法useItem()
调用。在PHP的对象方法中调用析构函数
拨打activate()
后useItem()
有可能销毁吗?如果没有,确保物品永久消失的最佳方法是什么?
如果您愿意,您可以简单地取消设置()。
实际上,PHP中的garbage collector or GC将完成您需要的所有工作,一旦变量超出范围或对其有零引用。清楚的是,GC在PHP 5.3中进行了重大修改,因此如果您使用的是5.2.x,则可能仍然存在一些性能问题。
如果我理解正确的话,你有这样的:
class AbstractMyClass {
abstract protected function activate();
public function useItem() {
//...
$this->activate();
//...
}
}
class MyClass extends AbstractMyClass { /* ... */ }
在这种情况下,没有,有没有办法让对象调用useItem
短后被破坏:
$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 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();