X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=docs%2Fglobals.txt;h=8b4c755bfe89b5fe75085b4f0691c8846110f38e;hb=8720241703a0ee05145bcbeed7b8f3384f5f4bc8;hp=519b4161aa74cfd8e443f09194c95b57fef5adcf;hpb=380f4da60040ccf2fb5df6bb6ad58bad1bca9a9b;p=lhc%2Fweb%2Fwiklou.git diff --git a/docs/globals.txt b/docs/globals.txt index 519b4161aa..8b4c755bfe 100644 --- a/docs/globals.txt +++ b/docs/globals.txt @@ -1,29 +1,67 @@ globals.txt -PHP loves globals. I hate them. This is not a great -combination, but I manage. I could get rid of most of -them by having a single "HTTP request" object, and using -it to hold everything that's now global (which is exactly -what I'd do in a Java servlet). But that's really -awkward in PHP, and wouldn't really provide much benefit -in readability or maintainability, so I go with the flow -of PHP and use globals. Here's documentation on the -important globals used by the system. +Globals are evil. The original MediaWiki code relied on globals for processing +context far too often. MediaWiki development since then has been a story of +slowly moving context out of global variables and into objects. Storing +processing context in object member variables allows those objects to be reused +in a much more flexible way. Consider the elegance of: -$wgOut - OutputPage object for HTTP response. + # Generate the article HTML as if viewed by a web request + $article = new Article( Title::newFromText( $t ) ); + $article->view(); + +versus + + # Save current globals + $oldTitle = $wgTitle; + $oldArticle = $wgArticle; + + # Generate the HTML + $wgTitle = Title::newFromText( $t ); + $wgArticle = new Article; + $wgArticle->view(); + + # Restore globals + $wgTitle = $oldTitle + $wgArticle = $oldArticle + +Some of the current MediaWiki developers have an idle fantasy that some day, +globals will be eliminated from MediaWiki entirely, replaced by an application +object which would be passed to constructors. Whether that would be an +efficient, convenient solution remains to be seen, but certainly PHP 5 makes +such object-oriented programming models easier than they were in previous +versions. + +For the time being though, MediaWiki programmers will have to work in an +environment with some global context. At the time of writing, 418 globals were +initialised on startup by MediaWiki. 304 of these were configuration settings, +which are documented in DefaultSettings.php. There is no comprehensive +documentation for the remaining 114 globals, however some of the most important +ones are listed below. They are typically initialised either in index.php or in +Setup.php. + +For a description of the classes, see design.txt. $wgTitle Title object created from the request URL. +$wgOut + OutputPage object for HTTP response. + +$wgUser + User object for the user associated with the current request. + $wgLang - Language object for this request. + Language object selected by user preferences. -$wgArticle - Article object corresponsing to $wgTitle. +$wgContLang + Language object associated with the wiki being viewed. -$wgLinkCache - LinkCache object. +$wgParser + Parser object. Parser extensions register their hooks here. -... +$wgRequest + WebRequest object, to get request data +$wgMemc, $messageMemc, $parserMemc + Object caches