Make list=logevents display log entries by anonymous users
[lhc/web/wiklou.git] / includes / ScopedCallback.php
index 1d5b26b..ef22e0a 100644 (file)
 
 /**
  * Class for asserting that a callback happens when an dummy object leaves scope
+ *
+ * @since 1.21
  */
 class ScopedCallback {
-       /** @var Closure */
+       /** @var callable */
        protected $callback;
 
        /**
-        * @param $callback Closure
+        * @param callable $callback
+        * @throws MWException
         */
-       public function __construct( Closure $callback ) {
+       public function __construct( $callback ) {
+               if ( !is_callable( $callback ) ) {
+                       throw new MWException( "Provided callback is not valid." );
+               }
                $this->callback = $callback;
        }
 
+       /**
+        * Trigger a scoped callback and destroy it.
+        * This is the same is just setting it to null.
+        *
+        * @param ScopedCallback $sc
+        */
+       public static function consume( ScopedCallback &$sc = null ) {
+               $sc = null;
+       }
+
+       /**
+        * Destroy a scoped callback without triggering it
+        *
+        * @param ScopedCallback $sc
+        */
+       public static function cancel( ScopedCallback &$sc = null ) {
+               if ( $sc ) {
+                       $sc->callback = null;
+               }
+               $sc = null;
+       }
+
+       /**
+        * Trigger the callback when this leaves scope
+        */
        function __destruct() {
-               call_user_func( $this->callback );
+               if ( $this->callback !== null ) {
+                       call_user_func( $this->callback );
+               }
        }
 }