Implementing Patterns within PHP, Page 2
The Singleton pattern possesses two general features:
- The default class constructor cannot be called. Instead, it will be called through a designated class maintainer method that ensures only one instantiation is available at any given time.
- A static class member that holds a reference to the existing class resource identifier.
Let's build a PHP class using the Singleton development pattern. Suppose that you're creating a Web-based action game. Of course, there can be one and only one hero, and therefore we need to ensure that only one exists at any given time. Sounds like a perfect reason to use the Singleton pattern! In Listing 1-1, I create a singleton class titled Hero(), and show you how even multiple instantiations yield the same object.
Listing 1-1. A PHP-based singleton pattern implementation
<?phpclass Hero { private static $exists = NULL; private $name = "Superhero"; private function __construct() { // No implementation. } static function introduce() { if (self::$exists === NULL) { self::$exists = new Hero(); } return self::$exists; } function setName($name) { $this->name = $name; } function getName() { return $this->name; } } #end class Hero $hero = Hero::introduce(); $hero->setName("Lance"); var_dump($hero); echo "The hero's name is: ".$hero->getName()."<br />"; $hero2 = Hero::introduce(); var_dump($hero2); echo "The hero's name is: ".$hero2->getName()."<br />"; $hero2->setName("Bruce"); echo "The hero's name is: ".$hero->getName()."<br />"; echo "The hero's name is: ".$hero2->getName()."<br />";?>
Executing this example yields:
object(Hero)#1 (1) { } The hero's name is: Lance.object(Hero)#1 (1) { } The hero's name is: LanceThe hero's name is: BruceThe hero's name is: BruceAs you can see by the above output, we're only dealing with one instance of the class throughout the entire example.
0 Comments (click to add your comment)
Networking Solutions
