* class Extension { ... } * function myExtension() { new Extension; } * * * Won't work because PHP will destroy any reference to the initialized * extension when the function goes out of scope, furthermore one might want to * use some functions in the Extension class that won't exist by the time * extensions get parsed which would mean lots of nasty workarounds to get * around initialization and reference issues. * * This class allows one to write hir extension as: * * * function myExtension() { * class Extension { ... } * new PersistentObject( new Extension ); * } * * * The class will then not get parsed until everything is properly initialized * and references to it won't get destroyed meaning that it's possible to do * something like: * * * $wgParser->setHook( 'tag' , array( &$this, 'tagFunc' ) ); * * * And have it work as expected * * @package MediaWiki * @subpackage Extensions * * @author Ævar Arnfjörð Bjarmason * @copyright Copyright © 2005, Ævar Arnfjörð Bjarmason * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later */ $wgPersistentObjects = array(); class PersistentObject { function PersistentObject( &$obj ) { $wgPersistentObjects[] = $obj; } }