TitleValue: Don't use Assert for basic type checks
authorKunal Mehta <legoktm@member.fsf.org>
Wed, 15 Aug 2018 04:09:44 +0000 (21:09 -0700)
committerKunal Mehta <legoktm@member.fsf.org>
Wed, 15 Aug 2018 04:09:44 +0000 (21:09 -0700)
Previously, `new TitleValue()` was roughly twice as slow as
`Title::makeTitle()`. Switching to basic is_int/is_string checks
makes TitleValue roughly twice as fast as Title!

Tested with benchmarkTitleValue.php.

Bug: T201801
Change-Id: Idccf159983145c1c11af9182292e1d5f704ba077

includes/title/TitleValue.php

index 3e13300..18e578d 100644 (file)
@@ -22,6 +22,7 @@
  */
 use MediaWiki\Linker\LinkTarget;
 use Wikimedia\Assert\Assert;
+use Wikimedia\Assert\ParameterTypeException;
 
 /**
  * Represents a page (or page fragment) title within MediaWiki.
@@ -76,10 +77,18 @@ class TitleValue implements LinkTarget {
         * @throws InvalidArgumentException
         */
        public function __construct( $namespace, $dbkey, $fragment = '', $interwiki = '' ) {
-               Assert::parameterType( 'integer', $namespace, '$namespace' );
-               Assert::parameterType( 'string', $dbkey, '$dbkey' );
-               Assert::parameterType( 'string', $fragment, '$fragment' );
-               Assert::parameterType( 'string', $interwiki, '$interwiki' );
+               if ( !is_int( $namespace ) ) {
+                       throw new ParameterTypeException( '$namespace', 'int' );
+               }
+               if ( !is_string( $dbkey ) ) {
+                       throw new ParameterTypeException( '$dbkey', 'string' );
+               }
+               if ( !is_string( $fragment ) ) {
+                       throw new ParameterTypeException( '$fragment', 'string' );
+               }
+               if ( !is_string( $interwiki ) ) {
+                       throw new ParameterTypeException( '$interwiki', 'string' );
+               }
 
                // Sanity check, no full validation or normalization applied here!
                Assert::parameter( !preg_match( '/^_|[ \r\n\t]|_$/', $dbkey ), '$dbkey',