49 public static function register(
$name, $callback ) {
50 if ( !isset( self::$handlers[
$name] ) ) {
51 self::$handlers[
$name] = [];
54 self::$handlers[
$name][] = $callback;
67 if ( !defined(
'MW_PHPUNIT_TEST' ) && !defined(
'MW_PARSER_TEST' ) ) {
68 throw new MWException(
'Cannot reset hooks in operation.' );
71 unset( self::$handlers[
$name] );
100 if ( !self::isRegistered(
$name ) ) {
102 } elseif ( !isset( self::$handlers[
$name] ) ) {
105 return self::$handlers[
$name];
131 public static function run( $event,
array $args = [], $deprecatedVersion =
null ) {
132 foreach ( self::getHandlers( $event )
as $hook ) {
134 if ( !is_array( $hook ) ) {
138 if ( !array_filter( $hook ) ) {
141 } elseif ( is_array( $hook[0] ) ) {
145 $hook = array_merge( $hook[0], array_slice( $hook, 1 ) );
153 if ( $hook[0] instanceof Closure ) {
154 $func =
"hook-$event-closure";
155 $callback = array_shift( $hook );
156 } elseif ( is_object( $hook[0] ) ) {
157 $object = array_shift( $hook );
158 $method = array_shift( $hook );
161 if ( $method ===
null ) {
162 $method =
"on$event";
165 $func = get_class( $object ) .
'::' . $method;
166 $callback = [ $object, $method ];
167 } elseif ( is_string( $hook[0] ) ) {
168 $func = $callback = array_shift( $hook );
170 throw new MWException(
'Unknown datatype in hooks for ' . $event .
"\n" );
175 if ( !is_callable( $callback ) ) {
176 throw new MWException(
'Invalid callback ' . $func .
' in hooks for ' . $event .
"\n" );
180 if ( $deprecatedVersion !==
null ) {
181 wfDeprecated(
"$event hook (used in $func)", $deprecatedVersion );
185 $hook_args = array_merge( $hook,
$args );
186 $retval = call_user_func_array( $callback, $hook_args );
192 } elseif (
$retval ===
false ) {