Heim Backend-Entwicklung PHP-Tutorial PHP-Entwurfsmuster – Adaptermuster Adapter

PHP-Entwurfsmuster – Adaptermuster Adapter

Jul 29, 2016 am 09:14 AM
error function public this

In Ihrer Anwendung können Sie eine dokumentierte Codebasis verwenden. Wir fügen jedoch häufig neue Funktionen hinzu, die die Verwendung vorhandener Objekte auf unterschiedliche Weise erfordern. Vielleicht braucht die neue Funktion einfach einen anderen Namen, oder vielleicht benötigt die neue Funktion ein etwas anderes Verhalten als das ursprüngliche Objekt.

Um die oben genannten Probleme zu lösen, ist die Verwendung des Adaptermodus eine gute Lösung. Verwenden Sie das Adaptermuster, um ein weiteres Objekt zu erstellen. Dieses AdapterObjekt fungiert als Vermittler zwischen der ursprünglichen Anwendung und der neuen Funktionalität. Das Adapter--Entwurfsmuster passt einfach die Schnittstelle eines -Objekts an die Schnittstelle an, die von einem anderen -Objekt erwartet wird.

Codebeispiel:

class errorObject{
	private $_error;

	public function __construct($error){
		$this->_error = $error;
	}

	public function getError(){
		return $this->_error;
	}
}

class logToConsole{
	private $_errorObject;

	public function __construct($errorObject){
		$this->_errorObject = $errorObject;
	}

	public function write(){
		fwrite(STDERR, $this->_errorObject->getError());
	}
}


$error = new errorObject("404:Not Found");
$log = new logToConsole($error);
$log->write();
Nach dem Login kopieren

Wenn sich eines Tages die Anforderungen ändern, ist es erforderlich, Fehler in einer CSV-Datei aufzuzeichnen. Das Format von CSV erfordert, dass die erste Spalte ein numerischer Fehlercode ist , und die zweite Spalte ist der Fehlertext. Die neue Anforderung hat Code bereitgestellt, der die Protokollierung implementiert. Das Problem besteht darin, dass der Code auf einer anderen Version von errorObject basiert, die sich von der derzeit verwendeten unterscheidet. Die neue errorObject-Klasse verfügt über zwei weitere Methoden namens getErrorNumber() und getErrorText(), die von der logToCSV-Klasse verwendet werden:
class logToCSV{
	const CSV_LOCATION = "log.csv";

	private $_errorObject;

	public function __construct($errorObject){
		$this->_errorObject = $errorObject;
	}

	public function write(){
		$line = $this->_errorObject->getErrorNumber();
		$line .= ',';
		$line .= $this->_errorObject->getErrorText();
		$line .= '\n';

		file_put_contents(self::CSV_LOCATION, $line, FILE_APPEND);
	}
}
Nach dem Login kopieren
Um dieses Problem anzugehen, können wir die folgenden zwei Lösungen anwenden:

● Erstellen Sie die errorObject-Klasse der vorhandenen Codebasis.

● Erstellen Sie eine Adapterklasse.

Unter Berücksichtigung der Notwendigkeit, die Standardisierung dieser öffentlichen Schnittstellen aufrechtzuerhalten, erstellen Sie einen Adapter Objekt ist die beste Lösung.

Die Funktionalität des vorhandenen errorObject muss im neu erstellten Adapter-

-Objekt vorhanden sein und die Methoden getErrorNumber() und getErrorText() müssen gültig sein.

class logToCSVAdapter extends errorObject{
	private $_errorNumber, $_errorText;

	public function __construct($error){
		parent::__construct($error);

		$parts = explode(':', $this->getError());

		$this->_errorNumber = $parts[0];
		$this->_errorText = $parts[1];
	}

	public function getErrorNumber(){
		return $this->_errorNumber;
	}

	public function getErrorText(){
		return $this->_errorText;
	}
}

$error = new logToCSVAdapter("404:Not Found");
$log = new logToCSV($error);
$log->write();
Nach dem Login kopieren
Wenn Sie die Schnittstelle eines
Objekts in ein anderes Objekt konvertieren müssen, ist die Implementierung von AdapterObjekt nicht nur eine bewährte Vorgehensweise Und es kann auch eine Menge Ärger reduzieren. Allgemeine Nutzungsszenarien des Adaptermodus:

● Datenbanktreiber (Sie können den Treiberquellcode jedes Frameworks anzeigen)


● Webservices (Verwenden Sie Adapter in mehreren verschiedenen Webservices)


Das Obige stellt das PHP-Entwurfsmuster vor - Adaptermuster, einschließlich des relevanten Inhalts. Ich hoffe, es wird für Freunde hilfreich sein, die sich für PHP-Tutorials interessieren.

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Lösung für PHP Schwerwiegender Fehler: Aufruf der undefinierten Methode PDO::prepare() in Lösung für PHP Schwerwiegender Fehler: Aufruf der undefinierten Methode PDO::prepare() in Jun 22, 2023 pm 06:40 PM

PHP ist eine beliebte Webentwicklungssprache, die schon seit langem verwendet wird. Die in PHP integrierte PDO-Klasse (PHP Data Object) ist für uns eine gängige Möglichkeit, bei der Entwicklung von Webanwendungen mit der Datenbank zu interagieren. Ein Problem, auf das einige PHP-Entwickler jedoch häufig stoßen, besteht darin, dass sie bei Verwendung der PDO-Klasse zur Interaktion mit der Datenbank eine Fehlermeldung wie diese erhalten: PHPFatalerror:CalltoundefinedmethodPDO::prep

Was soll ich tun, wenn bei der Verwendung von Axios in einer Vue-Anwendung „Uncaught (in Promise) Error: Request failed with status code 500' auftritt? Was soll ich tun, wenn bei der Verwendung von Axios in einer Vue-Anwendung „Uncaught (in Promise) Error: Request failed with status code 500' auftritt? Jun 24, 2023 pm 05:33 PM

Axios wird häufig in Vue-Anwendungen verwendet. Axios ist ein Promise-basierter HTTP-Client, der in Browsern und Node.js verwendet werden kann. Während des Entwicklungsprozesses erscheint manchmal die Fehlermeldung „Uncaught(inpromise)Error: Requestfailedwithstatuscode500“. Für Entwickler kann diese Fehlermeldung schwer zu verstehen und zu lösen sein. In diesem Artikel wird dies untersucht

Lösen Sie das Problem „Fehler: Unvollständiger Typ ist nicht zulässig' im C++-Code Lösen Sie das Problem „Fehler: Unvollständiger Typ ist nicht zulässig' im C++-Code Aug 26, 2023 pm 08:54 PM

Lösen Sie das „error:incompletetypeisnotallowed“-Problem im C++-Code. Während des C++-Programmierungsprozesses treten manchmal einige Kompilierungsfehler auf. Dieser Fehler wird normalerweise durch die Arbeit mit einem unvollständigen Typ verursacht. In diesem Artikel wird die Ursache dieses Fehlers erläutert und verschiedene Lösungen bereitgestellt. Zunächst einmal: Ich

Lösen Sie das Problem „Fehler: erwarteter Initialisierer vor ‚Datentyp'' im C++-Code Lösen Sie das Problem „Fehler: erwarteter Initialisierer vor ‚Datentyp'' im C++-Code Aug 25, 2023 pm 01:24 PM

Lösen Sie das „error:expectedinitializerbefore'datatype‘“-Problem in C++-Code. Beim Schreiben von Code treten manchmal Kompilierungsfehler auf. Einer der häufigsten Fehler ist „error:expectedinitializerbefore‘datatype‘“. Dieser Fehler tritt normalerweise in einer Variablendeklaration oder Funktionsdefinition auf und kann dazu führen, dass das Programm nicht korrekt kompiliert werden kann oder

0271: Was soll ich tun, wenn der Computer aufgrund eines Echtzeituhrfehlers nicht eingeschaltet werden kann? 0271: Was soll ich tun, wenn der Computer aufgrund eines Echtzeituhrfehlers nicht eingeschaltet werden kann? Mar 13, 2023 am 11:30 AM

Lösung für „0271: Echtzeituhrfehler“, der nicht gestartet werden kann: 1. Drücken Sie F1 und verschieben Sie in der angezeigten Benutzeroberfläche die Optionsleiste zum dritten Element „Datum/Uhrzeit“. 2. Ändern Sie die Systemzeit manuell auf die aktuelle Uhrzeit einmal; 3. Drücken Sie F10 und wählen Sie im Popup-Dialogfeld „Ja“ aus. 4. Öffnen Sie das Notebook erneut, um es normal zu starten.

Was bedeutet Funktion? Was bedeutet Funktion? Aug 04, 2023 am 10:33 AM

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.

Lösung für PHP Schwerwiegender Fehler: Aufruf der undefinierten Funktion mysqli_connect() Lösung für PHP Schwerwiegender Fehler: Aufruf der undefinierten Funktion mysqli_connect() Jun 23, 2023 am 09:40 AM

Beim Schreiben von Webanwendungen mit PHP wird häufig eine MySQL-Datenbank zum Speichern von Daten verwendet. PHP bietet eine Möglichkeit zur Interaktion mit der MySQL-Datenbank namens MySQLi. Bei der Verwendung von MySQLi wird jedoch manchmal eine Fehlermeldung angezeigt, wie unten gezeigt: PHPFatalerror:Calltoundefinedfunctionmysqli_connect() Diese Fehlermeldung bedeutet, dass PHP my nicht finden kann

So lösen Sie die PHP-Warnung: fopen(): Fehler beim Öffnen des Streams: Keine solche Datei oder kein solches Verzeichnis So lösen Sie die PHP-Warnung: fopen(): Fehler beim Öffnen des Streams: Keine solche Datei oder kein solches Verzeichnis Aug 19, 2023 am 10:44 AM

So lösen Sie PHPWarning:fopen():failedtoopenstream:Nosuchfileordirectory Bei der Verwendung von PHP-Entwicklung stoßen wir häufig auf einige Dateibetriebsprobleme, darunter „PHPWarning:fopen():failedtoopenstream:Nosuchfileordirectory“.

See all articles