X-Git-Url: https://git.cyclocoop.org/%27.WWW_URL.%27admin/?a=blobdiff_plain;f=includes%2FStubObject.php;h=a3970f34cb4f539b98c04f2a4a8bbb48c80bb453;hb=23eae7ed23d5a21e0944e3b3cc536551f9bff7f2;hp=59238faa901c520cca8a62004837840be6455e1f;hpb=709c614382c199b7d3c5fc5bdbd285d8d3a5f339;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/StubObject.php b/includes/StubObject.php index 59238faa90..a3970f34cb 100644 --- a/includes/StubObject.php +++ b/includes/StubObject.php @@ -25,6 +25,12 @@ * 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 @@ -63,6 +69,20 @@ class StubObject { return is_object( $obj ) && !$obj instanceof StubObject; } + /** + * 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. + * + * @param $obj Object to check. + * @return void + */ + static function unstub( $obj ) { + if ( $obj instanceof StubObject ) { + $obj->_unstub( 'unstub', 3 ); + } + } + /** * 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