Singletons: A Myth in PHP Database Access
You're questioning the necessity of singletons for PHP database access, considering the following simplified singleton class:
class Database {
private static $db;
private function __construct(){}
static function get() {
if(!isset(self::$db))
self::$db = new PDO(...);
return self::$db;
}
}
Copy after login
You wonder why this wouldn't suffice instead of a more complex singleton class with a singleton() method.
Debunking the Usefulness of Singletons in PHP
In PHP, singletons offer minimal to no advantages:
-
Memory Conservation: Singletons aim to reduce memory usage by sharing instances in shared memory. However, in PHP, objects reside in private request memory, rendering this purpose irrelevant.
-
Enforcing Singleton: Conceptual singletons may not require language mechanisms for enforcement. Only consider singletons when creating a second instance will cause detrimental effects.
Disadvantages of Singletons
-
Global Coupling: Singletons introduce global scope dependencies, complicating testing and maintainability.
-
Dependency Injection Alternative: When a single instance is required across multiple classes, dependency injection provides a cleaner and more testable solution.
Erich Gamma's Skepticism
Even one of the creators of the singleton pattern, Erich Gamma, now questions its usefulness:
- "I'm in favor of dropping Singleton. Its use is almost always a design smell"
When Singletons Might be Applicable
Despite the general skepticism towards singletons in PHP, consider these scenarios:
-
Global Access Point: Creating a global access point for an instance within the same request MAY be justified, but can introduce coupling and maintenance challenges.
-
Eliminating Second Instances: Only implement singletons when there's a dire need to prevent additional instances from being created.
Additional Resources
- [Testing Singletons in PHP: Why it's Tricky](link_to_How_is_testing_the_registry_pattern_or_singleton_hard_in_PHP)
- [Disadvantages of Singleton Database Classes](link_to_What_are_the_disadvantages_of_using_a_PHP_database_class_as_a_singleton)
- [Decision Diagram for Singletons](link_to_Singleton_Decision_Diagram)
The above is the detailed content of Are Singletons Really Necessary for PHP Database Access?. For more information, please follow other related articles on the PHP Chinese website!