Definition of singleton pattern

Ensure that there is only one instance of a class , Cannot duplicate instances , It can only instantiate itself , And provide this instance to the whole system .

Problem solved

That is, a class is instantiated only once , When someone else instantiates it again , Returns the first instantiated object , Can avoid a lot of new operation , Reduce resource consumption .

principle : Four steps , Three private and one public

* Privatization static properties
* Construction method of privatization
* Privatization cloning method
* Static method of public ownership
Packaging background

When there are multiple singleton classes in a project , Every new class , We have to define "three private and one public" , It's a bit repetitive , It's not just a waste of time and energy , And the code is bloated and difficult to maintain , Is there any More elegant How to write it ?

Trait To encapsulate the singleton
php It has been a single inheritance language from before to now , Properties and methods cannot be inherited from both base classes , To solve this problem ,php Out Trait This feature
usage : By using use keyword , Declare the Trait name , concrete Trait Statement use of Trait key word ,Trait Cannot be instantiated .

Code Examples

Create a Trait
<?php /** * Trait Singleton Singleton mode */ Trait Singleton { private static $instance
= null; private function __construct() { parent::__construct(); // Construction method of privatization }
private function __clone() { // Privatization cloning method } public function __sleep() {
// rewrite __sleep method , Leave the return empty , Prevent serialization and deserialization from getting new objects return []; } public static function
getInstance() { if (!isset(self::$instance)) { self::$instance = new
static();// Not here new self(),self and static difference } return self::$instance; } }
Multiple inheritance usage
Other classes are used only in code use Singleton; , You can inherit the singleton <?php /** * Desc: Business 1 Inheritance instance */ class YieWu1
{ use Singleton; // Key line of code public function getInfo(){ // Business code } } <?php /** *
Desc: Business 2 Inheritance instance */ class YieWu2 { use Singleton; // Key line of code public function
getInfo(){ // Business code } }
Real column call
YieWu1::getInstance()->getInfo(); YieWu2::getInstance()->getInfo();