From 6d55d4450b0c68ebc922d4a4a0ea69cab33ff0ef Mon Sep 17 00:00:00 2001 From: daniel Date: Thu, 24 May 2012 15:37:49 +0200 Subject: [PATCH] Workaround for autoloading when using php namespace. This is a Workaround for PHP bug (5.3.2. is broken, it's fixed in 5.3.6): Strip leading backslashes from class names. When namespaces are used, leading backslashes are used to indicate the top-level namespace, e.g. \foo\Bar. When used like this in the code, the leading backslash isn't passed to the auto-loader ($className would be 'foo\Bar'). However, if a class is accessed using a string instead of a class literal (e.g. $class = '\foo\Bar'; new $class()), then some versions of PHP do not strip the leading backlash in this case, causing autoloading to fail. amended: as per Jeroen's suggestion, used // for comments and ltrim instead of preg_replace. Change-Id: I71e0429ed1da5c83262dbf6f989c782385af9bcb --- includes/AutoLoader.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/includes/AutoLoader.php b/includes/AutoLoader.php index de31736aa5..2ead2c7087 100644 --- a/includes/AutoLoader.php +++ b/includes/AutoLoader.php @@ -1006,6 +1006,14 @@ class AutoLoader { static function autoload( $className ) { global $wgAutoloadClasses, $wgAutoloadLocalClasses; + // Workaround for PHP bug (5.3.2. is broken, it's fixed in 5.3.6). + // Strip leading backslashes from class names. When namespaces are used, leading backslashes are used to indicate + // the top-level namespace, e.g. \foo\Bar. When used like this in the code, the leading backslash isn't passed to + // the auto-loader ($className would be 'foo\Bar'). However, if a class is accessed using a string instead of a + // class literal (e.g. $class = '\foo\Bar'; new $class()), then some versions of PHP do not strip the leading + // backlash in this case, causing autoloading to fail. + $className = ltrim( $className, '\\' ); + if ( isset( $wgAutoloadLocalClasses[$className] ) ) { $filename = $wgAutoloadLocalClasses[$className]; } elseif ( isset( $wgAutoloadClasses[$className] ) ) { -- 2.20.1