* returning null) is equivalent to returning true.
*/
public static function run( $event, array $args = array(), $deprecatedVersion = null ) {
- $stats = RequestContext::getMain()->getStats();
- $metric = $stats->increment( 'hooks.' . $event );
- $metric->setSampleRate( 0.001 );
-
foreach ( self::getHandlers( $event ) as $hook ) {
// Turn non-array values into an array. (Can't use casting because of objects.)
if ( !is_array( $hook ) ) {
}
/**
- * Handle PHP errors issued inside a hook. Catch errors that have to do with
- * a function expecting a reference, and let all others pass through.
+ * Handle PHP errors issued inside a hook. Catch errors that have to do
+ * with a function expecting a reference, missing arguments, or wrong argument
+ * types. Pass all others through to to the default error handler.
*
- * This REALLY should be protected... but it's public for compatibility
+ * This is useful for throwing errors for major callback invocation errors
+ * (with regard to parameter signature) which PHP just gives warnings for.
*
* @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 Always returns false
+ * @return bool
*/
public static function hookErrorHandler( $errno, $errstr ) {
- if ( strpos( $errstr, 'expected to be a reference, value given' ) !== false ) {
+ if ( strpos( $errstr, 'expected to be a reference, value given' ) !== false
+ || strpos( $errstr, 'Missing argument ' ) !== false
+ || strpos( $errstr, ' expects parameter ' ) !== false
+ ) {
throw new MWHookException( $errstr, $errno );
}
+
+ // Delegate unhandled errors to the default handlers
return false;
}
}