Heim  >  Artikel  >  Backend-Entwicklung  >  Was ist ein Merkmal? Anwendungsszenarien von PHP-Eigenschaften

Was ist ein Merkmal? Anwendungsszenarien von PHP-Eigenschaften

不言
不言Original
2018-08-29 15:29:331818Durchsuche

Der Inhalt dieses Artikels befasst sich mit der Frage: Was sind Eigenschaften? Die Anwendungsszenarien von PHP-Eigenschaften haben einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen.

Warum Merkmale verwenden?

Die PHP-Sprache verwendet ein typisches Vererbungsmodell. In diesem Modell schreiben wir zunächst eine allgemeine Stammklasse, um Grundfunktionen zu implementieren, und erweitern dann diese Stammklasse, um eine spezifischere Klasse zu erstellen, die die Implementierung von der direkten übergeordneten Klasse erbt. Dies wird als Vererbungshierarchie bezeichnet und viele Programmiersprachen verwenden dieses Muster.

Meistens funktioniert dieses typische Vererbungsmodell gut. Was sollten Sie jedoch tun, wenn Sie möchten, dass sich zwei nicht verwandte PHP-Klassen ähnlich verhalten? Die beiden PHP-Klassen RetailStore und Car haben beispielsweise sehr unterschiedliche Funktionen und keine gemeinsame übergeordnete Klasse in der Vererbungshierarchie. Allerdings sollten beide Klassen in der Lage sein, mithilfe von Geokodierungstechniken in Breiten- und Längengrade umzurechnen und diese dann auf der Karte anzuzeigen.
Eigenschaften wurden geboren, um dieses Problem zu lösen. Merkmale können verwendet werden, um modulare Implementierungen in mehreren unabhängigen Klassen zu implementieren. Und Merkmale können auch die Wiederverwendung von Code fördern.
Um dieses Problem zu lösen, bestand meine erste Reaktion darin, eine übergeordnete Klasse Geocodable zu erstellen (das ist nicht gut) und sowohl Retalstore als auch Car diese Klasse erben zu lassen. Diese Lösung ist schlecht, weil wir zwei nicht verwandte Klassen zwingen, von demselben Vorfahren zu erben, und es offensichtlich ist, dass dieser Vorfahre nicht zu ihrer jeweiligen Vererbungshierarchie gehört.
Meine letzte Reaktion bestand darin, das Merkmal „Geokodierbar“ zu erstellen (was die beste Möglichkeit ist), die Klassenmethode „Geokodierbar“ zu definieren und zu implementieren und dieses Merkmal dann in die Klassen „Einzelhandelsgeschäft“ und „Auto“ zu mischen. Dadurch wird die natürliche Vererbungshierarchie nicht gestört.

Zum Beispiel

Wir hoffen, dass die Klassen RetailStore und Car Geokodierungsfunktionen bieten, und sind uns bewusst, dass weder Vererbung noch Schnittstellen die besten Lösungen sind. Die von uns gewählte Lösung bestand darin, ein geokodierbares Merkmal zu erstellen, den Breiten- und Längengrad zurückzugeben und es dann in einer Karte darzustellen. Die Definition des Merkmals „Geokodierbar“ lautet wie folgt:

?php
trait Geocodable {
	/** @var string */
	protected $address;

	/** @var \Geocoder\Geocoder */
	protected $geocoder;
	/** @var \GeocoderlResult\Geocoded */
	protected $geocoderResult;
	public function setGeocoder(\Geocoder\GeocoderIntertace $geocoder){
		$this->geocoder = $geocoder;

	}
	public function setAddress($address){
		$this->address = $address; 
	}

	public function getLatitude(){
		if (isset($this->geocoderResult) === false){
			$this->geocodeAddress();
		}
		return $this->geocoderResult->getLatitude();
	}
	public function getlongitude(){
		if (isset($this->geocoderResult) === false){
			$this->geocodeAddress();
		}
		return $this->geocoderResult->getLongitude();
	}
	protected function geocodeAddress(){
		$this->geocoderResult = $this->geocoder->geocode($this->address);
		return true;
	}
}

Das Merkmal „Geokodierbar“ muss nur die Attribute und Methoden definieren, die zum Implementieren der Geokodierungsfunktion erforderlich sind, und nichts anderes ist erforderlich. Dieses Merkmal „Geokodierbar“ definiert drei Klassenattribute: a Darstellung Adresse (Zeichenfolge), eines ist das Geocoder-Objekt und das andere ist das Ergebnisobjekt, das nach der Geocoder-Verarbeitung erhalten wird. Wir definieren außerdem vier öffentliche Methoden und eine geschützte Methode. Die Methode setGeocoder() wird zum Einfügen des Geocoder-Objekts verwendet; die Methode setAddress() wird zum Festlegen der Adresse verwendet; die Methoden getlatitude() und getLongitude() geben den Breitengrad bzw. Längengrad zurück; an die Geocoder-Instanz, um den Längengrad zu erhalten. Das durch die Encoder-Verarbeitung erhaltene Ergebnis.
Wie nutzt man Eigenschaften?

Die Methode zur Verwendung von PHP-Merkmalen ist sehr einfach. Fügen Sie einfach die use MyTrait;-Anweisung zum Definitionskörper der PHP-Klasse hinzu. Hier ist ein Beispiel. Offensichtlich muss MyTrait bei der tatsächlichen Verwendung durch den entsprechenden PHP-Trait-Namen ersetzt werden.

<?php
class MyClass{
    use MyTrait;
    //这是类的实现
}

Vorschlag: Verwenden Sie das Schlüsselwort „use“, um sowohl Namespaces als auch Merkmale zu importieren, aber die Importorte sind unterschiedlich. Namespaces, Klassen, Schnittstellen, Funktionen und Konstanten werden außerhalb der Klassendefinition importiert, und Merkmale werden innerhalb der Klassendefinition importiert. Der Unterschied ist gering, aber wichtig. Und Voraussetzung für die Nutzung ist, dass Sie die PHP-Datei eingebunden haben.

Wir müssen nur so viel tun. Jetzt kann jede Retailstore-Instanz die Eigenschaften und Methoden verwenden, die vom Geocodable-Merkmal bereitgestellt werden, das heißt:

$store = new RetailStore();
$store->setddress(&#39;420 9th Avenue, New York, NY 10001 USA&#39;);

Der PHP-Interpreter kopiert das Merkmal und fügt es zur Kompilierungszeit in den Klassendefinitionskörper ein.

Verwandte Empfehlungen:

Detaillierte Erläuterung von PHP-Namespaces, Merkmalen und Generatoren

Das obige ist der detaillierte Inhalt vonWas ist ein Merkmal? Anwendungsszenarien von PHP-Eigenschaften. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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