onDestructStr = $str; } function __destruct() { if ( $onDestructStr ) print $onDestructStr; else call_user_func_array( $this->onDestruct, $this->onDParms ); } function rollback() { call_user_func_array( $this->onDestruct, $this->onDParms ); } function commit() { if ( $this->onCommit ) call_user_func_array( $this->onCommit, $this->onCParms ); else throw new InvalidArgumentException( 'No rule to commit.' ); } /** Cancels pending cleanup. */ function disarm( $a = NULL ) { if ( $a !== NULL ) { foreach ( $a as $c ) $c->disarm(); return; } $this->onDestruct = NULL; $this->onDestructStr = NULL; $this->onDParms = array(); } /** DB::Q( \p $q ) */ function sql( $q, $p = NULL ) { if ( $p !== NULL ) return new Trans( array('DB','q'), array( $q ), array('DB','q'), (array)$p ); return new Trans( array('DB','q'), array( $q ) ); } /** hm */ protected function __construct( $callback, $parms = array(), $commitCB=NULL, $commitParms = array() ) { $this->onDestruct = $callback; $this->onDParms = $parms; $this->onCommit = $commitCB; $this->onCParms = $commitParms; } } ?>