title: Rewrite Title::getBaseText() for performance/readability
authorThiemo Kreuz <thiemo.kreuz@wikimedia.de>
Wed, 27 Mar 2019 10:25:25 +0000 (11:25 +0100)
committerThiemo Kreuz <thiemo.kreuz@wikimedia.de>
Wed, 27 Mar 2019 10:25:25 +0000 (11:25 +0100)
This code does not really need to explode a path in all it's individual
segments. All it needs to know is *if* a title is a path (with at least
one slash), and then remove the last segment. That's pretty much exactly
what the code proposed in this patch now does.

Change-Id: I9cf714f7bb637ecd9e1f44340219c76ddd60ee29

includes/Title.php

index 0f45839..ce0b959 100644 (file)
@@ -1702,16 +1702,18 @@ class Title implements LinkTarget, IDBAccessObject {
         * @return string Base name
         */
        public function getBaseText() {
+               $text = $this->getText();
                if ( !MWNamespace::hasSubpages( $this->mNamespace ) ) {
-                       return $this->getText();
+                       return $text;
                }
 
-               $parts = explode( '/', $this->getText() );
-               # Don't discard the real title if there's no subpage involved
-               if ( count( $parts ) > 1 ) {
-                       unset( $parts[count( $parts ) - 1] );
+               $lastSlashPos = strrpos( $text, '/' );
+               // Don't discard the real title if there's no subpage involved
+               if ( $lastSlashPos === false ) {
+                       return $text;
                }
-               return implode( '/', $parts );
+
+               return substr( $text, 0, $lastSlashPos );
        }
 
        /**