//让该类在外界无法造对象 //让外界可以造一个对象,做一个静态方法返回对象 //在类里面通过让静态变量控制返回对象只能是一个。
Es gibt drei Hauptpunkte des Singleton-Musters:
Erstens kann eine Klasse nur eine Instanz haben
Das zweite ist, dass es diese Instanz selbst erstellen muss
Das dritte ist, dass es diese Instanz selbst für das gesamte System bereitstellen muss.
Warum den PHP-Singleton-Modus verwenden
1. Die Anwendung von PHP erfolgt hauptsächlich in Datenbankanwendungen, in einer Anwendung Wenn Sie bei der objektorientierten Entwicklung den Singleton-Modus verwenden, können Sie eine große Anzahl neuer Vorgänge vermeiden, die Ressourcen verbrauchen, und Sie können auch Datenbankverbindungen reduzieren, sodass zu viele Verbindungen entstehen sind weniger wahrscheinlich.
2. Wenn eine Klasse benötigt wird, um bestimmte Konfigurationsinformationen im System global zu steuern, kann sie einfach im Singleton-Modus implementiert werden. Dies ist im FrontController-Teil von Zend zu sehen Rahmen.
3. In einer Seitenanforderung ist das Debuggen einfach, da der gesamte Code (z. B. die Datenbankoperationsklasse db) in einer Klasse konzentriert ist und wir Hooks in der Klasse setzen können Klasse, Ausgabeprotokolle, um var_dump und echo überall zu vermeiden.
class cat { public $name; private function __construct() { } static $temp; static function new_ob() { if(empty(self::$temp)){ self::$temp = new cat(); } return self::$temp; } function speak(){ return "喵喵喵"; } } //$mao = new cat(); //如果没有猫就造一个,然后等于新的xxx,如果有,直接等于。达到限制的目的。 //$mao; //if (empty($mao)){ // $mao = new cat(); //} // $xxx = $mao; $mao = cat::new_ob(); $mao2 = cat::new_ob(); //给1猫改名字,2猫的名字输出为1猫改的名字。此为单例。 $mao->name = "py";
2. Einfaches Fabrikmuster
①Abstrakte Basisklasse: Definieren Sie einige abstrakte Methoden in der Klasse. Wird zum Implementieren von
②Von der abstrakten Basisklasse in der Unterklasse geerbt: Implementieren Sie die abstrakte Methode in der Basisklasse
③Factory-Klasse: gewohnt Instanziieren Sie alle entsprechenden Unterklassen
abstract class jsq { public $a; public $b; function yunsuan(){ } } //此为拓展 class jiafa extends jsq { function yunsuan() { //parent::yunsuan(); // TODO: Change the autogenerated stub return $this ->a+$this->b; } } class jianfa extends jsq { function yuansuan(){ return $this->a-$this->b; } } class factory { static function create($x){ switch ($x){ case "+": return new jiafa(); break; case "-": return new jianfa(); break; } } } //$j1 = new jiafa(); //$j1->a = 1; //$j1->b = 2; //$j1->yunsuan(); //尽量避免实例化对象,采用静态方法获取。 $jf = factory::create("+"); $jf->a = 1; $jf->b = 2; echo $jf->yunsuan();
Das obige ist der detaillierte Inhalt vonDer Unterschied zwischen Factory-Modus und Singleton-Modus in PHP-Entwurfsmustern. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!