The lang_string class.
This special class is used to create an object representation of a string request. It is special because processing doesn't occur until the object is first used. The class was created especially to aid performance in areas where strings were required to be generated but were not necessarily used. As an example the admin tree when generated uses over 1500 strings, of which normally only 1/3 are ever actually printed at any time. The performance advantage is achieved by not actually processing strings that arn't being used, as such reducing the processing required for the page.
How to use the lang_string class? There are two methods of using the lang_string class, first through the forth argument of the get_string function, and secondly directly. The following are examples of both.
- Through get_string calls e.g. $string = get_string($identifier, $component, $a, true); $string = get_string('yes', 'moodle', null, true);
- Direct instantiation $string = new lang_string($identifier, $component, $a, $lang); $string = new lang_string('yes');
How do I use a lang_string object? The lang_string object makes use of a magic __toString method so that you are able to use the object exactly as you would use a string in most cases. This means you are able to collect it into a variable and then directly echo it, or concatenate it into another string, or similar. The other thing you can do is manually get the string by calling the lang_strings out method e.g. $string = new lang_string('yes'); $string->out(); Also worth noting is that the out method can take one argument, $lang which allows the developer to change the language on the fly.
When should I use a lang_string object? The lang_string object is designed to be used in any situation where a string may not be needed, but needs to be generated. The admin tree is a good example of where lang_string objects should be used. A more practical example would be any class that requries strings that may not be printed (after all classes get renderer by renderers and who knows what they will do ;))
When should I not use a lang_string object? Don't use lang_strings when you are going to use a string immediately. There is no need as it will be processed immediately and there will be no advantage, and in fact perhaps a negative hit as a class has to be instantiated for a lang_string object, however get_string won't require that.
Limitations:
- You cannot use a lang_string object as an array offset. Doing so will result in PHP throwing an error. (You can use it as an object property!)
- Copyright
- 2011 Sam Hemelryk
- License
- http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later