stack level too deep." ); if ( !isset( $bt[$l]['type'] )) { throw new Exception ( 'Cannot find called class -> backtrace type not set' ); } else switch ( $bt[$l]['type'] ) { case '::': $lines = file( $bt[$l]['file'] ); $i = 0; $callerLine = ''; do { $i++; $callerLine = $lines[$bt[$l]['line']-$i] . $callerLine; } while ( stripos( $callerLine, $bt[$l]['function'] ) === false ); preg_match('/([a-zA-Z0-9\_]+)::'.$bt[$l]['function'].'/', $callerLine, $matches); if ( !isset($matches[1] )) { // must be an edge case. throw new Exception ( "Could not find caller class -> originating method call is obscured." ); } switch ( $matches[1] ) { case 'self': case 'parent': return jigoshop_called_class( $bt, $l+1 ); default: return $matches[1]; } // won't get here. case '->': switch ( $bt[$l]['function'] ) { case '__get': // edge case -> get class of calling object if ( !is_object( $bt[$l]['object'] )) throw new Exception ( "Could not find called class -> edge case fail. __get called on non object." ); return get_class( $bt[$l]['object'] ); default: return $bt[$l]['class']; } default: throw new Exception ( "Could not find called class -> unknown backtrace method type" ); } } } function get_called_class() { return jigoshop_class_tools::get_called_class(); } }