ホームページ  >  記事  >  バックエンド開発  >  PHP の特性

PHP の特性

高洛峰
高洛峰オリジナル
2017-02-28 15:19:301453ブラウズ

まえがき

元同僚が転職し、面接中に PHP の特徴について尋ねられました。使ったことがないのでうまく答えられなかったのですが、おそらく何度か使ったことがあるので、考えて以下にまとめてみました。

trait

trait は、一部のクラス (Class) が特定の属性またはメソッドを持つ必要がある一方で、同じ親クラスの他のクラスがこれらの属性やメソッドを含めないようにする必要がある場合に使用されます

もちろん、これにも関連します。開発者のクラスを抽象化する能力がある人は、トレイトの使用を減らすことができますが、そうでない場合は、トレイトの使用が無意味になってしまいます。開発者を制約し、開発プロセス中に呼び出す必要がある特性の特定の属性とメソッドに注意を払うように思い出させる役割です。

同僚が良い質問をしました。これはインターフェイスでも同じではないでしょうか?

急ぐ必要はありません。まず例を見てみましょう:

たとえば、Web サイト上のさまざまなデータを収集したい場合、Spider クラス を開発しました。 Spider には request () リクエストを担当します。

<?php namespace XWSoul\Network;
class Spider
{
 public function request($url)
 {
 //do sth.
 }
}
. Spider 有个方法叫 request() 负责请求.

<?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);
 }
}

但是采集数据的过程中, 有些网站对蜘蛛敏感有些则不. 对于敏感的网站, 我们给出了一个使用代理的解决方案. 但是使用代理是会影响抓取速度的. 这就产生了 Spider 的子类有些需要用代理, 而能不用代理则尽量不用的情况.

于是这个时候我们新增了一个 trait Proxy:

rrreee

trait 重写了 Spider 的 request()

ただし、データ収集の過程で、一部の Web サイトはスパイダーに敏感ですが、一部の Web サイトはスパイダーに敏感ではありません。ただし、プロキシを使用するとクロール速度に影響するため、Spider の一部のサブクラスではプロキシを使用する必要がありますが、現時点ではプロキシを使用しないようにしてください。新しい特性 Proxy:

rrreee

特性を追加しました。この特性は Spider の request() メソッドをオーバーライドし、プロキシを呼び出さずに呼び出された場合に例外がスローされることを制限します。

前の質問に戻りますが、トレイトとインターフェイスの使用の違いは何ですか?

インターフェイスの制約は、定義の最初に実装する必要があります。メソッドの実装を制約できます。ただし、メソッドの呼び出しを制限することはできません。トレイトは一種のポストコールであり、メソッドを実装しています。重要なのは、それ自体を呼び出すクラスに制約を課すだけであり、呼び出すクラスには影響を与えないことです。 (またしても意味のない文) )、再利用可能であり、Spider クラス自体の実装を破壊しません。Spider は依然として同じ Spider です。

trait の使用法はすでに非常に優れていると思います。ここで有効です


後で


誰かが別のリクエスト、たとえばproxyRequstを実装することに決めてもいいですか?あなたの言ったことは理にかなっています...しかし、別のプロキシを使用して違いがある場合はどうなるでしょうか?リクエストの詳細で if if if? と言い続けていますが、なぜこのようなすっきりした解決策を放棄するのでしょうか?🎜🎜 PHP に関するその他の記事については、PHP 中国語 Web サイトに注目してください。 🎜🎜🎜🎜🎜
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。