X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2FStubObject.php;h=baf5109952781e7d1617972f5be3fc0bbcf307ce;hb=af431ec783e66c12d6693d638029a9f912c14541;hp=4abc283299abef61997cc0a8396e9b9a2686f957;hpb=9ba3fca2d8adc56787c8efc32c41424cb212e387;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/StubObject.php b/includes/StubObject.php index 4abc283299..baf5109952 100644 --- a/includes/StubObject.php +++ b/includes/StubObject.php @@ -48,19 +48,25 @@ class StubObject { /** @var null|string */ protected $class; + /** @var null|callable */ + protected $factory; + /** @var array */ protected $params; /** - * Constructor. - * * @param string $global Name of the global variable. - * @param string $class Name of the class of the real object. + * @param string|callable $class Name of the class of the real object + * or a factory function to call * @param array $params Parameters to pass to constructor of the real object. */ public function __construct( $global = null, $class = null, $params = [] ) { $this->global = $global; - $this->class = $class; + if ( is_callable( $class ) ) { + $this->factory = $class; + } else { + $this->class = $class; + } $this->params = $params; } @@ -80,7 +86,7 @@ class StubObject { * infinite loop when unstubbing an object or to avoid reference parameter * breakage. * - * @param object $obj Object to check. + * @param object &$obj Object to check. * @return void */ public static function unstub( &$obj ) { @@ -110,8 +116,10 @@ class StubObject { * @return object */ public function _newObject() { - return ObjectFactory::getObjectFromSpec( [ - 'class' => $this->class, + $params = $this->factory + ? [ 'factory' => $this->factory ] + : [ 'class' => $this->class ]; + return ObjectFactory::getObjectFromSpec( $params + [ 'args' => $this->params, 'closure_expansion' => false, ] ); @@ -149,7 +157,6 @@ class StubObject { } if ( get_class( $GLOBALS[$this->global] ) != $this->class ) { - $fname = __METHOD__ . '-' . $this->global; $caller = wfGetCaller( $level ); if ( ++$recursionLevel > 2 ) { throw new MWException( "Unstub loop detected on call of " @@ -165,9 +172,7 @@ class StubObject { } /** - * Stub object for the user language. It depends of the user preferences and - * "uselang" parameter that can be passed to index.php. This object have to be - * in $wgLang global. + * Stub object for the user language. Assigned to the $wgLang global. */ class StubUserLang extends StubObject { @@ -175,10 +180,6 @@ class StubUserLang extends StubObject { parent::__construct( 'wgLang' ); } - public function __call( $name, $args ) { - return $this->_call( $name, $args ); - } - /** * Call Language::findVariantLink after unstubbing $wgLang. *