* File to aid in writing extensions, see documentation
authorÆvar Arnfjörð Bjarmason <avar@users.mediawiki.org>
Wed, 21 Dec 2005 00:12:10 +0000 (00:12 +0000)
committerÆvar Arnfjörð Bjarmason <avar@users.mediawiki.org>
Wed, 21 Dec 2005 00:12:10 +0000 (00:12 +0000)
includes/PersistentObject.php [new file with mode: 0644]

diff --git a/includes/PersistentObject.php b/includes/PersistentObject.php
new file mode 100644 (file)
index 0000000..5c53acd
--- /dev/null
@@ -0,0 +1,51 @@
+<?php
+if ( ! defined( 'MEDIAWIKI' ) )
+       die();
+/**
+ * Sometimes one wants to make an extension that defines a class that one wants
+ * to backreference somewhere else in the code, doing something like:
+ * <code>
+ * class Extension { ... }
+ * function myExtension() { new Extension; }
+ * </class>
+ *
+ * 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:
+ *
+ * <code>
+ * function myExtension() {
+ *     class Extension { ... }
+ *     new PersistentObject( new Extension );
+ * }
+ * </code>
+ *
+ * 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:
+ *
+ * <code>
+ * $wgParser->setHook( 'tag' , array( &$this, 'tagFunc' ) );
+ * </code>
+ *
+ * And have it work as expected
+ *
+ * @package MediaWiki
+ * @subpackage Extensions
+ *
+ * @author Ævar Arnfjörð Bjarmason <avarab@gmail.com>
+ * @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;
+       }
+}