Heim  >  Artikel  >  Backend-Entwicklung  >  Merkmale in PHP

Merkmale in PHP

高洛峰
高洛峰Original
2017-02-28 15:19:301471Durchsuche

Vorwort

Ein ehemaliger Kollege wechselte den Job und wurde im Vorstellungsgespräch nach PHP-Eigenschaften gefragt. Ich habe es noch nie benutzt, also habe ich es nicht gut beantwortet. Ich habe es wahrscheinlich ein paar Mal benutzt, also habe ich darüber nachgedacht und die folgende Zusammenfassung zusammengestellt.

Merkmal

Merkmal ist ein bestimmtes Attribut oder eine bestimmte Methode, die einige Klassen (Klasse) haben sollten, und andere Klassen desselben übergeordneten Elements sollten die Einbeziehung dieser Attribute vermeiden Verwendung von Methoden.

Natürlich hängt dies auch mit der Fähigkeit des Entwicklers zusammen, Klassen zu abstrahieren. Einige Leute mit guten Abstraktionsfähigkeiten können die Verwendung von Merkmalen reduzieren, aber diese Situation sollte unvermeidbar sein, sonst sind Merkmale Es ist bedeutungslos, wenn es so ist erscheint.

Es gibt eine andere Situation: Bei der Verwendung von Merkmalen kann es dazu beitragen, Entwickler einzuschränken und Entwickler daran zu erinnern, auf bestimmte Attribute von Merkmalen zu achten, die während des Entwicklungsprozesses aufgerufen werden müssen Methoden.

Kollegen haben eine gute Frage gestellt: Hat die Schnittstelle nicht auch diese Rolle?

Keine Eile, schauen wir uns zuerst ein Beispiel an:

Wenn Sie beispielsweise verschiedene Daten auf der Website sammeln möchten, haben Sie die Spider-Klasse . Spider entwickelt. Es gibt eine Methode namens request() , die für Anfragen zuständig ist >

Während des Datenerfassungsprozesses sind einige Websites jedoch empfindlich gegenüber Spinnen, andere jedoch nicht. Für sensible Websites haben wir jedoch eine Lösung bereitgestellt, die einen Proxy verwendet Dies führt dazu, dass einige Unterklassen von Spider einen Proxy verwenden müssen. Versuchen Sie, wenn möglich, keinen Proxy zu verwenden.
<?php namespace XWSoul\Network;
class Spider
{
 public function request($url)
 {
 //do sth.
 }
}

Daher haben wir zu diesem Zeitpunkt eine neue Eigenschaft Proxy hinzugefügt:

Merkmal überschreibt die
<?php namespace XWSoul\Network;
trait Proxy
{

 protected $isProxy = false;

 public function useProxy($proxy)
 {
 //do sth proxy setups.
 $this->isProxy = true;
 return $this;
 }

 public function request($url)
 {
 if (!$this->isProxy) {
  throw new Exception("Please using proxy.");
 }
 //do sth.
 return parent::request($url);
 }
}
-Methode von Spider und begrenzt das Auslösen einer Ausnahme, wenn sie ohne Aufruf eines Proxys aufgerufen wird

Zurück zum vorherigen Frage, Merkmal ist wie folgt: Was ist der Unterschied zwischen der Verwendung und der Schnittstelle? request()

Die Einschränkungen der Schnittstelle sind voreingestellt und müssen zu Beginn der Definition implementiert werden. Es kann jedoch die Implementierung von Methoden einschränken Der Aufruf von Methoden kann nicht eingeschränkt werden. Er hat die Methode implementiert. Der Schlüssel liegt darin, dass sie nur der Klasse, die sich selbst aufruft, Einschränkungen auferlegt (einen unsinnigen Satz). nennt sich nicht selbst (wieder ein Unsinnssatz). Es ist wiederverwendbar und zerstört nicht die Implementierung der Spider-Klasse.Ich denke, die Verwendung von Merkmalen ist hier bereits sehr effektiv.

Danach

Jemand könnte sich dazu entschließen, eine weitere Anfrage zu implementieren, zum Beispiel ProxyRequst Das macht Sinn ... Wenn ich jedoch einen anderen Proxy verwende, sind die spezifischen Details der Anfrage anders. Was soll ich im Code immer wieder sagen? Wie Merkmal? Weitere Artikel zu Merkmalen in PHP finden Sie auf der chinesischen PHP-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