PHP中单例模式跟工厂模式学习总结
PHP中单例模式和工厂模式学习总结
<?php ////////////////////////////////////////////// //单例模式 /** * 数据库连接职责的集中控制 * 声明一个单例类 */ class Database { private $_db; //声明一个私有的实例变量(构造对象时这个变量的值会被填充) static $_instance //声明一个静态变量(保存类中仅有的一个实例) //声明私有构造方法为了防止外部代码使用new操作符来创建对象 private function _construct(){ $this->_db = pg_connect('dbname = example_db'); } //声明私有_clone方法为了消除php语言中可以复制对象从而破坏单一职责的一个漏洞 private _clone(){}; /** * 声明getInstance()静态方法(单例模式实际构造);这个方法会检测静态实例变量是否已保存这个类的一个实例。 * 假如它没有包含自身的一个实例,那么类会初始化并且保存到$_instance变量中. * 下次访问这段代码时,$_instance 变量会保存类的一个实例,并且这个实例不会再次初始化。最后,这个方法返回实例的引用 */ public static function getInstance(){ if( !(self::$_instance instanceof self) ){ self::$_instance = new self(); } return self::$_instance; } public function query($sql){ return pg_query($this->_db, $sql);//使用$this->_db执行一个查询 } } /** * 对单例类的使用 */ $db = Database::getInstance(); $db->query('select * from example_table'); /** * 使用不能被实例化的纯静态类 */ class SomeClass { //防止类被当作实例使用 private function _construct(){} public static function SomeMethod(){ //执行一些操作 } } /////////////////////////////////////////////////////// //工厂模式:包含了一个专门用来创建其他对象的方法的类。 /** * 创建一个基本的工厂类 */ class MyObject { //对象将从工厂返回 } class MyFactory { public static function factory(){ //返回对象一个新实例 return new MyObject(); } } //调用方法 $instance = MyFactory::factory();////////////////////////////////////////// //图片对象工厂 /** * 使用工厂类解析图片文件 */ interface IImage { function getHeight(); function getWidth(); function getData(); } class Iamge_PNG implements IImage { private $_width, $_height, $_data; public function _construct($file){ $this->_file = $_file; $this->_parse(); } private function _parse(){ //完成格式化解析工作 //并填充$_width, $_height, $_data } public function getWidth(){ return $this->$_width; } public function getHeight(){ return $this->$_height; } public function getData(){ return $this->$_data; } } class Iamge_JPEG implements IImage { private $_width, $_height, $_data; public function _construct($file){ $this->_file = $_file; $this->_parse(); } private function _parse(){ //完成格式化解析工作 //并填充$_width, $_height, $_data } public function getWidth(){ return $this->$_width; } public function getHeight(){ return $this->$_height; } public function getData(){ return $this->$_data; } } class ImageFactory { public static function factory($file){ $pathParts = pathInfo($file); switch (strtolower($pathParts['extension'])) { case 'jpg' : $ret = new Image_JPEG($file); break; case 'png' : $ret = new Image_PNG($file); break; case 'gif' : $ret = new Image_GIF($file); break; default; // PROBLEM } if($ret instanceof IImage){ return $ret; }else{ //problem } } } // $image = ImageFactory::factory('/path/to/my.jpg'); //$image现在是Image_JPEG类的一个实例 echo $image->getWidth(); /** * 可移植的数据库 × 使用工厂类解决数据库可移植问题。 */ interface IDatabaseBindings { public function userExists($email); } class PGSQL implements IDatabaseBindings { protected $_connection; public function _construct() { $this->$_connection = pg_connect('dbname = example_db'); } public function userExists($email) { $emailEscaped = pg_escape_string($email); $query = 'select 1 from users where email = "'.$emailEscaped.'"'; if ($result = pg_query($query, $this->$_connection)) { return (pg_num_row($result > 0)) ? true : false; }else{ return false; } } } class MYSQL implements IDatabaseBindings() { protected $_connection; public function _construct() { $this->$connection = mysql_connect('localhost'); mysql_select_db('example_db', $this->$_connection ); } public function userExists($email) { $emailEscaped = mysql_real_escape_string($email); $query = 'select 1 from users where email = "'. $emailEscaped .'"'; if ($result = mysql_query($query, $this->$_connection)) { return (mysql_num_rows($result) > 0 ) ? true : false; }else{ return false; } } } class DatabaseFactory { public static function factory() { $type = loadtypefromconfigfile(); switch ($type){ case 'PGSQL': return new PGSQL(); break; case 'MYSQL': return new MYSQL(); break; } } } //用法 $db = DatabaseFactory::factory(); $db->userExists([email protected]');?>

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Viele Benutzer werden sich bei der Auswahl von Smartwatches für die Marke Huawei entscheiden. Viele Benutzer sind neugierig auf den Unterschied zwischen Huawei GT3pro und GT4. Was sind die Unterschiede zwischen Huawei GT3pro und GT4? 1. Aussehen GT4: 46 mm und 41 mm, das Material ist Glasspiegel + Edelstahlgehäuse + hochauflösende Faserrückschale. GT3pro: 46,6 mm und 42,9 mm, das Material ist Saphirglas + Titangehäuse/Keramikgehäuse + Keramikrückschale 2. Gesundes GT4: Mit dem neuesten Huawei Truseen5.5+-Algorithmus werden die Ergebnisse genauer. GT3pro: EKG-Elektrokardiogramm sowie Blutgefäß und Sicherheit hinzugefügt

Die Verwendung von return in der C-Sprache ist: 1. Für Funktionen, deren Rückgabewerttyp ungültig ist, können Sie die Rückgabeanweisung verwenden, um die Ausführung der Funktion vorzeitig zu beenden. 2. Für Funktionen, deren Rückgabewerttyp nicht ungültig ist, ist die Funktion von Die Return-Anweisung dient dazu, die Ausführung der Funktion zu beenden. 3. Beenden Sie die Ausführung der Funktion vorzeitig wenn die Funktion keinen Wert zurückgibt.

Funktion bedeutet Funktion. Es handelt sich um einen wiederverwendbaren Codeblock mit bestimmten Funktionen. Er kann Eingabeparameter akzeptieren, bestimmte Operationen ausführen und Ergebnisse zurückgeben. Code, um die Wiederverwendbarkeit und Wartbarkeit des Codes zu verbessern.

Warum das Snipping-Tool unter Windows 11 nicht funktioniert Das Verständnis der Grundursache des Problems kann dabei helfen, die richtige Lösung zu finden. Hier sind die häufigsten Gründe, warum das Snipping Tool möglicherweise nicht ordnungsgemäß funktioniert: Focus Assistant ist aktiviert: Dies verhindert, dass das Snipping Tool geöffnet wird. Beschädigte Anwendung: Wenn das Snipping-Tool beim Start abstürzt, ist es möglicherweise beschädigt. Veraltete Grafiktreiber: Inkompatible Treiber können das Snipping-Tool beeinträchtigen. Störungen durch andere Anwendungen: Andere laufende Anwendungen können mit dem Snipping Tool in Konflikt geraten. Das Zertifikat ist abgelaufen: Ein Fehler während des Upgrade-Vorgangs kann zu diesem Problem führen. Diese einfache Lösung ist für die meisten Benutzer geeignet und erfordert keine besonderen technischen Kenntnisse. 1. Aktualisieren Sie Windows- und Microsoft Store-Apps

Quellcode: publicclassReturnFinallyDemo{publicstaticvoidmain(String[]args){System.out.println(case1());}publicstaticintcase1(){intx;try{x=1;returnx;}finally{x=3;}}}# Ausgabe Die Ausgabe des obigen Codes kann einfach zu dem Schluss kommen: return wird ausgeführt, bevor wir uns schließlich ansehen, was auf der Bytecode-Ebene passiert. Im Folgenden wird ein Teil des Bytecodes der Methode case1 abgefangen und mit dem Quellcode verglichen, um die Bedeutung jeder Anweisung darin zu kommentieren

Jedes Jahr bevor Apple eine neue Hauptversion von iOS und macOS veröffentlicht, können Benutzer die Betaversion mehrere Monate im Voraus herunterladen, um sie zuerst zu testen. Da die Software sowohl von der Öffentlichkeit als auch von Entwicklern verwendet wird, hat Apple für beide Entwickler- und öffentliche Versionen herausgebracht, bei denen es sich um öffentliche Betaversionen der Entwickler-Betaversionen handelt. Was ist der Unterschied zwischen der Entwicklerversion und der öffentlichen Version von iOS? Im wahrsten Sinne des Wortes handelt es sich bei der Entwicklerversion um eine Entwickler-Betaversion und bei der öffentlichen Version um eine öffentliche Betaversion. Die Entwicklerversion und die öffentliche Version richten sich an unterschiedliche Zielgruppen. Die Entwicklerversion wird von Apple zum Testen durch Entwickler verwendet. Sie benötigen ein Apple-Entwicklerkonto, um sie herunterzuladen und zu aktualisieren.

Teil 1: Erste Schritte zur Fehlerbehebung Überprüfen des Apple-Systemstatus: Bevor wir uns mit komplexen Lösungen befassen, beginnen wir mit den Grundlagen. Das Problem liegt möglicherweise nicht an Ihrem Gerät; die Server von Apple sind möglicherweise ausgefallen. Besuchen Sie die Systemstatusseite von Apple, um zu sehen, ob der AppStore ordnungsgemäß funktioniert. Wenn es ein Problem gibt, können Sie nur warten, bis Apple es behebt. Überprüfen Sie Ihre Internetverbindung: Stellen Sie sicher, dass Sie über eine stabile Internetverbindung verfügen, da das Problem „Verbindung zum AppStore nicht möglich“ manchmal auf eine schlechte Verbindung zurückzuführen ist. Versuchen Sie, zwischen WLAN und mobilen Daten zu wechseln oder die Netzwerkeinstellungen zurückzusetzen (Allgemein > Zurücksetzen > Netzwerkeinstellungen zurücksetzen > Einstellungen). Aktualisieren Sie Ihre iOS-Version:

In diesem Artikel lernen wir die Funktion enumerate() und den Zweck der Funktion „enumerate()“ in Python kennen. Was ist die Funktion enumerate()? Die Funktion enumerate() von Python akzeptiert eine Datensammlung als Parameter und gibt ein Aufzählungsobjekt zurück. Aufzählungsobjekte werden als Schlüssel-Wert-Paare zurückgegeben. Der Schlüssel ist der Index, der jedem Element entspricht, und der Wert sind die Elemente. Syntax enumerate(iterable,start) Parameter iterable – Die übergebene Datensammlung kann als Aufzählungsobjekt namens iterablestart zurückgegeben werden – Wie der Name schon sagt, wird der Startindex des Aufzählungsobjekts durch start definiert. wenn wir es ignorieren
