PHP5.4.0 以降、PHP は Trait と呼ばれるコード再利用メソッドを実装しました。 PHP は単一継承であるため、複数の異なる機能が必要な場合、複数の基本クラスを組み合わせる必要がありますが、Trait の利点は、自由に組み合わせることができ、コードが明確であることです。この記事では主に PHP の特徴を紹介しますので、困っている方は参考にしてください。
前書き
元同僚が転職し、面接中に 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:
rrreeetrait 重写了 Spider 的 request()
rrreee
特性は Spider の request()
メソッドをオーバーライドし、プロキシを呼び出さずに呼び出された場合に例外がスローされることを制限します。
インターフェイスの制約は事前に定義されており、メソッドの実装を制約することができます。メソッドの呼び出しを制限することはできません。トレイトは一種のポストコールであり、メソッドを実装しています。重要なのは、それ自体を呼び出すクラスに制約を課すだけであり、呼び出すクラスには影響を与えないことです。自身を呼び出さない (またしても意味不明な文) )、同時に再利用可能であり、Spider クラス自体の実装を破壊することはありません。Spider は依然として同じ Spider です。
トレイトの使用はすでに非常に効果的だと思います。
後で関連する推奨事項:
PHP での
PHP の Trait の特性と機能の共有HP
🎜🎜🎜🎜
以上がPHP のトレイトの簡単な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。