Dieser Artikel bringt Ihnen den Inhalt über das, was das Merkmal ist? PHP Charakter Anwendung Szene, gibt es ein bestimmten Referenzwert, besteht ein Bedarf für Freunde können beziehen sich auf ein bisschen, ich hoffe, Ihnen zu helfen.
Warum verwenden Eigenschaften?
Die PHP-Sprache verwendet ein typisches Vererbungsmodell. In diesem Modell wir zuerst schreiben eine generische Stammklasse, grundlegende Funktionalität zu implementieren und dann schützen die Stammklasse, erstellen eine spezifischere Klasse, die die Umsetzung von der direkt übergeordneten Klasse erbt. Dies nennt man Vererbungshierarchie, und viele Programmiersprachen verwenden Sie dieses Muster.
Die meisten der Zeit, funktioniert dieses typische Vererbungsmodell gut. Aber was soll ich tun, wenn ich möchte, dass zwei unabhängige PHP-Klassen in ein ähnliches Verhalten Verhalten? Z. B. RetailStore und Auto zwei PHP-Klassen arbeiten sehr unterschiedlich, und es gibt keine gemeinsamen übergeordneten Klasse in der Vererbungshierarchie. Jedoch sollten alle zwei Klassen möglicherweise in breiten- und Längengrad mit Geokodierung Techniken konvertieren und dann auf einer Karte anzeigen.
Merkmale sind geboren, um solche Probleme zu lösen. Eigenschaften können auf modulare Weise in mehreren nicht verwandten Klassen von Menschen erreicht werden. Und Züge können auch Wiederverwendung von Code erleichtert.
Um dieses Problem zu lösen, war meine erste Reaktion eine übergeordneten Klasse Geocodable (was nicht gut ist), so dass sowohl Retalstore als auch Auto der Klasse erben. Diese Problemumgehung ist nicht gut, denn wir zwingen zwei unabhängige Klassen die gleichen Vorfahren Erben, und es klar ist, dass diese Vorfahren nicht zu der jeweiligen Vererbungshierarchie gehört.
Meine letzte Reaktion war eine Geocodable-Eigenschaft (die besten erfolgt) zu erstellen, definieren Sie den Brunnen um die Geokodierung Maschine nationalen Haar Loch dieser beiden Klassen von der Originalmethode zu erreichen, und setzen Sie dann in den zwei Klassen der gemischten Person Retailstore und Auto dieses Merkmal. Dabei wird der Vererbungshierarchie der alten Natur nicht schüren.
Zum Beispiel
Wir wollen die zwei Klassen von RetailStore und Auto bieten Geokodierung Fähigkeiten zu erkennen, dass Vererbung und Schnittstellen sind nicht optimal. Die Option wählten wir war erstellen ein Geocodable Merkmal, Rückkehr breiten- und Längengrad, und ziehen Sie sie in der Karte. Die Geocedable Merkmale sind wie folgt definiert:
?phptrait 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;}}
Geocodable Merkmale müssen nur die Eigenschaften und Methoden zur Geokodierung Implementierung definieren, und nichts anderes ist erforderlich, eine Geocodable-Eigenschaft, die drei Klasseneigenschaften definiert: eine Vertretung Adresse (String), eine Geokodierung-Objekt und ein Result-Objekt, die abgerufen wird, nachdem die Geocodierung verarbeitet wird. Wir haben auch vier öffentliche Methoden und eine geschützte Methode definiert. Die SetGeocoder ()-Methode wird verwendet, um Geocoder Objekte zu injizieren; Die SetAddress ()-Methode wird verwendet, um die Adresse eingestellt; Die Methoden Getlatitude () und GetLongitude () Rückkehr Längen- und Breitengrad, beziehungsweise; Die GeocodeAddress ()-Methode übergibt die Adressenzeichenfolge an die Geocoder-Instanz um die Ergebnisse von der Geokodierung verarbeitet.
Verwendung von Eigenschaften
PHP-Eigenschaften werden verwendet, ganz einfach, mit dem Einsatz von MyTrait; Aussagen können die Definition Körper der PHP-Klasse hinzugefügt werden. Im folgenden ist ein Beispiel. Natürlich sollte wenn tatsächlich verwendet, die MyTrait mit den entsprechenden PHP-Charakter-Namen ersetzt werden.
≪? Phpclass MyClass {-MyTrait; Dies ist die Implementierung der Klasse}
Empfehlung: Namespaces und Eigenschaften werden verwendet, um Menschen mit Einsatz Keywords zu führen, aber die Position des Führers ist anders. Namespaces, Klassen, Schnittstellen, Funktionen und konstanten leiten Menschen in der Definition einer Klasse, während Züge Menschen in der Definition einer Klasse zu führen. Der Unterschied ist klein, aber es ist wichtig. Und die Prämisse der Verwendung Verwendung ist, dass Sie die PHP-Datei eingeführt haben.
Wir haben gerade so viel zu tun. Jetzt können jede Retailstore-Instanz die Eigenschaften und Methoden von Geocodable Eigenschaften, nämlich zur Verfügung gestellt:
$store = new RetailStore();$store->setddress('420 9th Avenue, New York, NY 10001 USA');
Der PHP-Interpreter kopiert die Zeichen in den Körper der Definition der Klasse zum Zeitpunkt der Kompilierung.