* @file
*/
-/**
- * @since 1.18
- */
-class MWHookException extends MWException {
-}
-
/**
* Hooks class.
*
* Array of events mapped to an array of callbacks to be run
* when that event is triggered.
*/
- protected static $handlers = array();
+ protected static $handlers = [];
/**
* Attach an event handler to a given hook.
*/
public static function register( $name, $callback ) {
if ( !isset( self::$handlers[$name] ) ) {
- self::$handlers[$name] = array();
+ self::$handlers[$name] = [];
}
self::$handlers[$name][] = $callback;
global $wgHooks;
if ( !self::isRegistered( $name ) ) {
- return array();
+ return [];
} elseif ( !isset( self::$handlers[$name] ) ) {
return $wgHooks[$name];
} elseif ( !isset( $wgHooks[$name] ) ) {
* processing to continue. Not returning a value (or explicitly
* returning null) is equivalent to returning true.
*/
- public static function run( $event, array $args = array(), $deprecatedVersion = null ) {
+ public static function run( $event, array $args = [], $deprecatedVersion = null ) {
foreach ( self::getHandlers( $event ) as $hook ) {
// Turn non-array values into an array. (Can't use casting because of objects.)
if ( !is_array( $hook ) ) {
- $hook = array( $hook );
+ $hook = [ $hook ];
}
if ( !array_filter( $hook ) ) {
}
$func = get_class( $object ) . '::' . $method;
- $callback = array( $object, $method );
+ $callback = [ $object, $method ];
} elseif ( is_string( $hook[0] ) ) {
$func = $callback = array_shift( $hook );
} else {
$badhookmsg = null;
$hook_args = array_merge( $hook, $args );
- set_error_handler( 'Hooks::hookErrorHandler' );
-
// mark hook as deprecated, if deprecation version is specified
if ( $deprecatedVersion !== null ) {
wfDeprecated( "$event hook (used in $func)", $deprecatedVersion );
}
- try {
- $retval = call_user_func_array( $callback, $hook_args );
- } catch ( MWHookException $e ) {
- $badhookmsg = $e->getMessage();
- } catch ( Exception $e ) {
- restore_error_handler();
- throw $e;
- }
-
- restore_error_handler();
+ $retval = call_user_func_array( $callback, $hook_args );
// Process the return value.
if ( is_string( $retval ) ) {
// String returned means error.
throw new FatalError( $retval );
- } elseif ( $badhookmsg !== null ) {
- // Exception was thrown from Hooks::hookErrorHandler.
- throw new MWException(
- 'Detected bug in an extension! ' .
- "Hook $func has invalid call signature; " . $badhookmsg
- );
} elseif ( $retval === false ) {
// False was returned. Stop processing, but no error.
return false;
return true;
}
-
- /**
- * Handle PHP errors issued inside a hook. Catch errors that have to do
- * with a function expecting a reference, and pass all others through to
- * MWExceptionHandler::handleError() for default processing.
- *
- * @since 1.18
- *
- * @param int $errno Error number (unused)
- * @param string $errstr Error message
- * @throws MWHookException If the error has to do with the function signature
- * @return bool
- */
- public static function hookErrorHandler( $errno, $errstr ) {
- if ( strpos( $errstr, 'expected to be a reference, value given' ) !== false ) {
- throw new MWHookException( $errstr, $errno );
- }
-
- // Delegate unhandled errors to the default MW handler
- return call_user_func_array(
- 'MWExceptionHandler::handleError', func_get_args()
- );
- }
}