get_called_class( $bt = false, $l = 1 )
Description Description
Source Source
File: includes/compat.php
function get_called_class( $bt = false, $l = 1 ) { if ( ! $bt ) { $bt = debug_backtrace(); } if ( ! isset ( $bt[ $l ] ) ) { throw new Exception ( "Cannot find called class -> stack level too deep." ); } if ( ! isset( $bt[ $l ]['type'] ) ) { throw new Exception ( '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 get_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 ( "Edge case fail. __get called on non object." ); } return get_class( $bt[ $l ]['object'] ); default: return get_class( $bt[ $l ]['object'] ); } default: throw new Exception ( "Unknown backtrace method type" ); } }
Expand full source code Collapse full source code View on Trac