我遇到了一种情况,如果条件在__destruct中为真,则需要调用__construct!
如何在构造函数中调用析构函数?
有办法吗?
我可以用一个技巧来完成这个任务,但是我需要在我的类中完成它,如果不符合我的标准,目标是销毁一个类。
编辑:
在构造函数中,我检查用户权限,如果试图删除post的用户不是admin,那么类的对象不应该实例化,换句话说,应该进行析构。
发布于 2011-12-21 17:44:10
避免在构造函数中执行实际工作。构造函数应该从本质上构建对象的实例。从构造函数调用__destruct()是没有意义的,因为实例不是属于类的方法,而是由调用new操作符的函数所拥有。
问问自己,在不能构造对象的情况下,调用站点上的new操作符应该返回什么?
$obj = new Class();如果对象不能正确地构造,应该为$obj分配什么?NULL?或者这段代码根本就没有意义?
你有几个选择:
$obj =新类();如果( $obj->initSomeStateThatMayFail() ){ // good,继续.}{ //处理失败.} unset($obj);// calls __destruct()
null或新实例。类{静态函数makeClass() { if ( testIfValidToInstantiate() ){返回新的self();} $obj {返回null;}} // .} $obj = Class :makeClass();if ($obj !== null ){ //进行.}
类{函数__construct() { if ( !testIfValidToInstantiate() )抛出新异常(“意外条件”);// .}尝试{ $obj =新类();// .}捕捉(异常$e ){ //做一些事情来处理这种情况.}
发布于 2011-12-21 16:52:02
请理解,调用析构函数与从工作集中删除类不是一回事!
如果myClass是在构造函数中解构的类,那么
$a=new myClass();仍然会导致将$a分配给myClass的实例!
发布于 2011-12-21 16:49:38
您不能从构造函数中销毁对象,但是可以让它设置一个变量,在创建它之后,它才是真正的销毁对象。就像这样:
<?php
class test{
function __construct(&$dest=false){
echo "Constructed\n";
if(1 == 1){ //Some condition
$dest = true;
}
}
function __destruct(){
echo "De-Constructed\n";
}
}
$a = new test($d);
if($d){
unset($a);
}
echo "End Prog\n";演示:http://ideone.com/fJxOq
https://stackoverflow.com/questions/8593308
复制相似问题