The Singleton Design Pattern for PHPby: Tony MarstonIntroduction In software engineering, a design pattern is a general solution to a common problem in software design. A design pattern isn't a finished design that can be transformed directly into code, it is a description or template for how to solve a problem that can be used in many different situations. One of these design patterns is called the Singleton. It's purpose can be described quite briefly as follows: Ensure a class has only one instance and provide a global point of access to it. It achieves this by only creating a new instance the first time it is referenced, and thereafter it simply returns the handle to the existing instance. Why should you want this facility in the processing of a web page? There are several reasons:
As with all design patterns there is more than one way in which it can be implemented, so in the following sections I will document some of the methods that I have encountered. You should also be aware that the code samples in this document will work in both PHP 4 and PHP 5. A non-class Helper function This method uses a separate non-class function as a "helper". It contains code similar to the following: function getDateObject () It is referenced with code similar to the following: $dateobj = getDateObject(); This method has the following advantages:
This method has the following disadvantages:
A separate Helper method within each class This method requires the addition of a function getInstance () It is referenced with code similar to the following: require_once 'std.datevalidation.class.inc'; This method has the following advantages:
This method has the following disadvantages:
A single Helper method for all classes This requires the creation of a separate class (called class singleton It is referenced with code similar to the following: require_once 'std.datevalidation.class.inc'; This method has the following advantages:
This method has the following disadvantages:
References The scope of a variable is the context in which it is defined, in this case a function or a class method. Normally the contents of a local variable are lost when program execution leaves this scope, but by defining a variable as 'static' you allow it to retain its value so that when program execution returns the previous value is still there. This value may be modified as many times as is required (as in the third example with the expanding array), so the term 'static' should not be confused with 'fixed, stable, stationary, not changing or moving'. This is known as the scope resolution operator and allows a class method to be executed without the need for instantiating an object of that class. So instead of Conclusion As you can see there is no single way to implement this design pattern, and this is the most simple pattern there is! Just think of the possible variations for the more complex patterns. © 2008 NetVisits, Inc. All rights reserved. |