Don't cast SpecialPageFactory::$list to an object
authorReedy <reedy@wikimedia.org>
Wed, 10 Sep 2014 18:45:43 +0000 (19:45 +0100)
committerReedy <reedy@wikimedia.org>
Wed, 10 Sep 2014 19:15:40 +0000 (20:15 +0100)
Callers insisde SpecialPageFactory using it as an object updated.

All other callers in extensions et al iterate over the array.

Bug: 67596
Change-Id: Ic917c7d87d5b316b4a2b2bde5932325ff67cf372

includes/specialpage/SpecialPageFactory.php

index 07b6b4e..f3ad69c 100644 (file)
@@ -223,9 +223,6 @@ class SpecialPageFactory {
                        // This hook can be used to remove undesired built-in special pages
                        wfRunHooks( 'SpecialPage_initList', array( &self::$list ) );
 
-                       // Cast to object: func()[$key] doesn't work, but func()->$key does
-                       settype( self::$list, 'object' );
-
                        wfProfileOut( __METHOD__ );
                }
 
@@ -245,8 +242,7 @@ class SpecialPageFactory {
                        global $wgContLang;
                        $aliases = $wgContLang->getSpecialPageAliases();
 
-                       // Objects are passed by reference by default, need to create a copy
-                       $missingPages = clone self::getList();
+                       $missingPages = self::getList();
 
                        self::$aliases = array();
                        // Check for $aliases being an array since Language::getSpecialPageAliases can return null
@@ -335,7 +331,8 @@ class SpecialPageFactory {
        public static function exists( $name ) {
                list( $title, /*...*/ ) = self::resolveAlias( $name );
 
-               return property_exists( self::getList(), $title );
+               $specialPageList = self::getList();
+               return isset( $specialPageList[$title] );
        }
 
        /**
@@ -346,8 +343,9 @@ class SpecialPageFactory {
         */
        public static function getPage( $name ) {
                list( $realName, /*...*/ ) = self::resolveAlias( $name );
-               if ( property_exists( self::getList(), $realName ) ) {
-                       $rec = self::getList()->$realName;
+               $specialPageList = self::getList();
+               if ( isset( $specialPageList[$realName] ) ) {
+                       $rec = $specialPageList[$realName];
                        if ( is_string( $rec ) ) {
                                $className = $rec;
 
@@ -357,10 +355,10 @@ class SpecialPageFactory {
                                // @deprecated, officially since 1.18, unofficially since forever
                                wfDeprecated( "Array syntax for \$wgSpecialPages is deprecated ($className), " .
                                        "define a subclass of SpecialPage instead.", '1.18' );
-                               self::getList()->$realName = MWFunction::newObj( $className, $rec );
+                               $specialPageList[$realName] = MWFunction::newObj( $className, $rec );
                        }
 
-                       return self::getList()->$realName;
+                       return $specialPageList[$realName];
                } else {
                        return null;
                }