Singleton Classes in PHP
In this PhpRiot Snippet I will show you how to create and use singleton classes. A singleton class is a class that can instantiated once only. While it may not come up frequently, it can be a useful technique when it simply doesn't make sense to have than one instance of a class.To achieve this we cannot instantiate it directly using the
new keyword. Instead, we must use a static class method to access the create and access the instance.
The key steps in creating singleton classes are as follows:
- Prevent direct instantiation by making the contructor private
- Store the only instance of the class as a static property of the class.
- Provide a static method to access the instance. The instance is created the first time this method is called.
MySingleton. The following code defines this class, including the private constructor so it cannot be directly instantiated.
Listing 1 Defining the MySingleton class (listing-1.php)
class MySingleton { private function __construct() { // put normal constructor code. // it will only ever be called once } public function someMethod() { echo "Doing something!"; } }
$_instance. We
make this private so it cannot be accessed except through the static
method we'll also create. The convention for the singleton accessor
method is to name is GetInstance (or getInstance, depending on your preference).
Listing 2 Turning MySingleton into a singleton class (MySingleton.php)
class MySingleton { private static $_instance; public static function GetInstance() { if (!self::$_instance instanceof self) { self::$_instance = new self(); } return self::$_instance; } private function __construct() { // put normal constructor code. // it will only ever be called once } public function someMethod() { echo "Doing something!"; } }
GetInstance method first checks if the $_instance property is a MySingleton. If it's not, the one and only instance is created. Once it has been created it can be returned.
The following listing shows how you can access and use the object.
Listing 3 Using the MySingleton class (index.php)
require_once('MySingleton.php'); $obj = MySingleton::GetInstance(); $obj->someMethod();
Other Options
- Download a PDF version of this article
- Put your PHP knowledge to the test with our online and iPad/iPhone quizzes
- View or post comments for this article
- Browse similar articles by tag: OOP, PHP
No comments:
Post a Comment