MediaWiki master
MediaWiki\StubObject\StubObject Class Reference

Class to implement stub globals, which are globals that delay loading the their associated module code by deferring initialisation until the first method call. More...

Inherited by MediaWiki\StubObject\DeprecatedGlobal, MediaWiki\StubObject\StubGlobalUser, and MediaWiki\StubObject\StubUserLang.

Public Member Functions

 __call ( $name, $args)
 Function called by PHP if no function with that name exists in this object.
 
 __construct ( $global=null, $class=null, $params=[])
 
 __get ( $name)
 Function called by PHP if no property with that name exists in this object.
 
 __set ( $name, $value)
 Function called by PHP if no property with that name exists in this object.
 
 _call ( $name, $args)
 Function called if any function exists with that name in this object.
 
 _get ( $name)
 Wrapper for __get(), similar to _call() above.
 
 _newObject ()
 Create a new object to replace this stub object.
 
 _set ( $name, $value)
 Wrapper for __set(), similar to _call() above.
 
 _unstub ( $name='_unstub', $level=2)
 This function creates a new object of the real class and replace it in the global variable.
 

Static Public Member Functions

static isRealObject ( $obj)
 Returns a bool value whenever $obj is a stub object.
 
static unstub (&$obj)
 Unstubs an object, if it is a stub object.
 

Protected Attributes

null string $class
 
null callable $factory
 
null string $global
 
array $params
 

Detailed Description

Class to implement stub globals, which are globals that delay loading the their associated module code by deferring initialisation until the first method call.

Note on reference parameters:

If the called method takes any parameters by reference, the __call magic here won't work correctly. The solution is to unstub the object before calling the method.

Note on unstub loops:

Unstub loops (infinite recursion) sometimes occur when a constructor calls another function, and the other function calls some method of the stub. The best way to avoid this is to make constructors as lightweight as possible, deferring any initialisation which depends on other modules. As a last resort, you can use MediaWiki\StubObject\StubObject::isRealObject() to break the loop, but as a general rule, the stub object mechanism should be transparent, and code which refers to it should be kept to a minimum.

Stability: newable

Definition at line 55 of file StubObject.php.

Constructor & Destructor Documentation

◆ __construct()

MediaWiki\StubObject\StubObject::__construct (   $global = null,
  $class = null,
  $params = [] 
)
Stability: stable
to call
Parameters
string | null$globalName of the global variable.
string | callable | null$className of the class of the real object or a factory function to call
array$paramsParameters to pass to constructor of the real object.

Reimplemented in MediaWiki\StubObject\DeprecatedGlobal.

Definition at line 76 of file StubObject.php.

References MediaWiki\StubObject\StubObject\$class, MediaWiki\StubObject\StubObject\$global, and MediaWiki\StubObject\StubObject\$params.

Member Function Documentation

◆ __call()

MediaWiki\StubObject\StubObject::__call (   $name,
  $args 
)

Function called by PHP if no function with that name exists in this object.

Parameters
string$nameName of the function called
array$argsArguments
Returns
mixed

Definition at line 154 of file StubObject.php.

References MediaWiki\StubObject\StubObject\_call().

◆ __get()

MediaWiki\StubObject\StubObject::__get (   $name)

Function called by PHP if no property with that name exists in this object.

Parameters
string$nameName of the property to get
Returns
mixed

Definition at line 177 of file StubObject.php.

References MediaWiki\StubObject\StubObject\_get().

◆ __set()

MediaWiki\StubObject\StubObject::__set (   $name,
  $value 
)

Function called by PHP if no property with that name exists in this object.

Parameters
string$nameName of the property to set
mixed$valueNew property value

Definition at line 200 of file StubObject.php.

References MediaWiki\StubObject\StubObject\_set().

◆ _call()

MediaWiki\StubObject\StubObject::_call (   $name,
  $args 
)

Function called if any function exists with that name in this object.

It is used to unstub the object. Only used internally, PHP will call self::__call() function and that function will call this function. This function will also call the function with the same name in the real object.

Parameters
string$nameName of the function called
array$argsArguments
Returns
mixed

Definition at line 123 of file StubObject.php.

References MediaWiki\StubObject\StubObject\_unstub().

Referenced by MediaWiki\StubObject\StubObject\__call().

◆ _get()

MediaWiki\StubObject\StubObject::_get (   $name)

Wrapper for __get(), similar to _call() above.

Parameters
string$nameName of the property to get
Returns
mixed

Definition at line 165 of file StubObject.php.

References MediaWiki\StubObject\StubObject\$global, and MediaWiki\StubObject\StubObject\_unstub().

Referenced by MediaWiki\StubObject\StubObject\__get().

◆ _newObject()

MediaWiki\StubObject\StubObject::_newObject ( )

◆ _set()

MediaWiki\StubObject\StubObject::_set (   $name,
  $value 
)

Wrapper for __set(), similar to _call() above.

Parameters
string$nameName of the property to set
mixed$valueNew property value

Definition at line 188 of file StubObject.php.

References MediaWiki\StubObject\StubObject\$global, and MediaWiki\StubObject\StubObject\_unstub().

Referenced by MediaWiki\StubObject\StubObject\__set().

◆ _unstub()

MediaWiki\StubObject\StubObject::_unstub (   $name = '_unstub',
  $level = 2 
)

This function creates a new object of the real class and replace it in the global variable.

This is public, for the convenience of external callers wishing to access properties, e.g. eval.php

Parameters
string$nameName of the method called in this object.
int$levelLevel to go in the stack trace to get the function who called this function.
Returns
object The unstubbed version of itself

Reimplemented in MediaWiki\StubObject\StubGlobalUser.

Definition at line 216 of file StubObject.php.

References MediaWiki\StubObject\StubObject\$global, MediaWiki\StubObject\StubObject\_newObject(), wfDebug(), and wfGetCaller().

Referenced by MediaWiki\StubObject\StubObject\_call(), MediaWiki\StubObject\StubObject\_get(), and MediaWiki\StubObject\StubObject\_set().

◆ isRealObject()

static MediaWiki\StubObject\StubObject::isRealObject (   $obj)
static

Returns a bool value whenever $obj is a stub object.

Can be used to break a infinite loop when unstubbing an object.

Parameters
object$objObject to check.
Returns
bool True if $obj is not an instance of MediaWiki\StubObject\StubObject class.

Definition at line 93 of file StubObject.php.

◆ unstub()

static MediaWiki\StubObject\StubObject::unstub ( $obj)
static

Unstubs an object, if it is a stub object.

Can be used to break a infinite loop when unstubbing an object or to avoid reference parameter breakage.

Parameters
object&$objObject to check.
Returns
void

Definition at line 105 of file StubObject.php.

Member Data Documentation

◆ $class

null string MediaWiki\StubObject\StubObject::$class
protected

◆ $factory

null callable MediaWiki\StubObject\StubObject::$factory
protected

Definition at line 63 of file StubObject.php.

Referenced by MediaWiki\StubObject\StubObject\_newObject().

◆ $global

null string MediaWiki\StubObject\StubObject::$global
protected

◆ $params

array MediaWiki\StubObject\StubObject::$params
protected

The documentation for this class was generated from the following file: