ホームページ バックエンド開発 PHPチュートリアル PHPにおけるトレイト定義の使い方とインターフェースの違いを詳しく解説

PHPにおけるトレイト定義の使い方とインターフェースの違いを詳しく解説

Jul 03, 2017 am 11:12 AM
php trait 違い

PHP5.4.0 以降、PHP は Trait と呼ばれるコード再利用メソッドを実装しました。 PHP は単一継承であるため、複数の異なる機能が必要な場合は、複数の基本クラスを組み合わせる必要がありますが、Traits の利点は、それらを自由に組み合わせることができ、コードが明確であることです。この記事では主に PHP の特徴を紹介しますので、困っている方は参考にしてください。

前書き

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

trait

trait は、一部のクラス (クラス) が特定の

属性

またはメソッドを持つ必要があるが、同じ親クラスの他のクラスがこれらの 属性やメソッド を含めることを避ける必要がある場合に使用されます。 もちろん、これは開発者のクラスを抽象化する能力にも関連しており、優れた抽象化機能を備えており、特性の使用を減らすことができるものもあります。ただし、この状況は避けられないものであり、そうでない場合は特性の出現が無意味になります。トレイトを使用する場合、開発者に制約

の役割を果たすことができ、開発プロセス中に呼び出す必要があるトレイトの特定のプロパティとメソッドに注意を払うように開発者に思い出させます。

同僚が良い質問を提起しました。インターフェイス) もこの目的に使用されますか?

早速、例を見てみましょう:

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

<?php namespace XWSoul\Network;
class Spider
{
 public function request($url)
 {
 //do sth.
 }
}
ログイン後にコピー
ただし、データ収集のプロセス中に、スパイダーに敏感な Web サイトとそうでない Web サイトがあります。ただし、プロキシを使用するとクロール速度に影響するため、Spider の一部のサブクラスではプロキシを使用する必要があるため、可能な限りプロキシを使用しないようにします。現時点では、新しい特性 Proxy:
<?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 の request() メソッドをオーバーライドし、プロキシを呼び出さずに呼び出すと例外がスローされることを制限します。

. Spider 有个方法叫 request() 负责请求.

rrreee

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

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

rrreee

trait 重写了 Spider 的 request() 前の質問に戻る、トレイト (インターフェイス) の使用法とインターフェイスの違いは何ですか?

インターフェイスの制約は事前に定義されており、メソッドの実装を制約することはできますが、メソッドを制約することはできません。メソッドの呼び出しは、実装された後の呼び出しです。重要なのは、それ自体を呼び出すクラス (意味のない文) に制約を課すだけであり、それ自体を呼び出さないクラス (意味のない文) には影響を与えないことです。同時に、再利用可能であり、Spider を破壊しません。クラス自体の実装が増えても、Spider は依然として同じ Spider です。後で言うこと

誰かが別のリクエストを実装することを決定するかもしれません。 、たとえば、proxyRequst では終わりではありませんか? あなたの言ったことは理にかなっています...しかし、別のプロキシを使用した場合、リクエストの詳細に違いがある場合はどうすればよいですか?コード

のようなすっきりした解決策をなぜ放棄する必要があるのでしょうか?

以上がPHPにおけるトレイト定義の使い方とインターフェースの違いを詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 Apr 05, 2025 am 12:04 AM

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

一致式(PHP 8)とそれがスイッチとどのように異なるかを説明します。 一致式(PHP 8)とそれがスイッチとどのように異なるかを説明します。 Apr 06, 2025 am 12:03 AM

PHP8では、一致式は、式の値に基づいて異なる結果を返す新しい制御構造です。 1)Switchステートメントに似ていますが、実行ステートメントブロックの代わりに値を返します。 2)一致式の式は厳密に比較され、セキュリティが向上します。 3)スイッチステートメントの脱落の可能性を回避し、コードのシンプルさと読みやすさを向上させます。

H5とミニプログラムとアプリの違い H5とミニプログラムとアプリの違い Apr 06, 2025 am 10:42 AM

H5。ミニプログラムとアプリの主な違いは次のとおりです。技術アーキテクチャ:H5はWebテクノロジーに基づいており、ミニプログラムとアプリは独立したアプリケーションです。経験と機能:H5は軽量で使いやすく、機能が限られています。ミニプログラムは軽量で、インタラクティブが良好です。アプリは強力で、スムーズな経験があります。互換性:H5はクロスプラットフォーム互換性があり、アプレットとアプリはプラットフォームによって制限されています。開発コスト:H5には、開発コストが低く、中程度のミニプログラム、最高のアプリがあります。適用可能なシナリオ:H5は情報表示に適しており、アプレットは軽量アプリケーションに適しており、アプリは複雑な機能に適しています。

クロスサイトリクエストフォーファリー(CSRF)とは何ですか?また、PHPにCSRF保護をどのように実装しますか? クロスサイトリクエストフォーファリー(CSRF)とは何ですか?また、PHPにCSRF保護をどのように実装しますか? Apr 07, 2025 am 12:02 AM

PHPでは、予測不可能なトークンを使用して、CSRF攻撃を効果的に防ぐことができます。特定の方法には次のものが含まれます。1。フォームのCSRFトークンを生成および埋め込みます。 2.リクエストを処理するときにトークンの有効性を確認します。

PSのエクスポートPDFのパスワード保護を設定する方法 PSのエクスポートPDFのパスワード保護を設定する方法 Apr 06, 2025 pm 04:45 PM

Photoshopでパスワードで保護されたPDFをエクスポート:画像ファイルを開きます。 [ファイル]&gtをクリックします。 「エクスポート」&gt; 「PDFとしてのエクスポート」。 「セキュリティ」オプションを設定し、同じパスワードを2回入力します。 [エクスポート]をクリックして、PDFファイルを生成します。

PHPで厳密なタイプ(declare(strict_types = 1);)を説明します。 PHPで厳密なタイプ(declare(strict_types = 1);)を説明します。 Apr 07, 2025 am 12:05 AM

PHPの厳格なタイプは、declare(strict_types = 1)を追加することで有効になります。ファイルの上部に。 1)関数パラメーターのタイプチェックと戻り値を強制して、暗黙の型変換を防ぎます。 2)厳格なタイプを使用すると、コードの信頼性と予測可能性を改善し、バグを減らし、保守性と読みやすさを向上させることができます。

XPathを使用して、JavaScriptの指定されたDOMノードから検索する方法は? XPathを使用して、JavaScriptの指定されたDOMノードから検索する方法は? Apr 04, 2025 pm 11:15 PM

JavaScriptのDOMノードの下でのXpath検索方法の詳細な説明、XPath式に基づいてDOMツリーから特定のノードを見つける必要があることがよくあります。あなたがする必要があるなら...

どのようにしてクラスが拡張されたり、PHPでメソッドがオーバーライドされたりするのを防ぐことができますか? (最終キーワード) どのようにしてクラスが拡張されたり、PHPでメソッドがオーバーライドされたりするのを防ぐことができますか? (最終キーワード) Apr 08, 2025 am 12:03 AM

PHPでは、最終的なキーワードを使用して、クラスが継承されないようにし、メソッドが上書きされます。 1)クラスを決勝としてマークする場合、クラスを継承することはできません。 2)メソッドを最終的にマークする場合、メソッドはサブクラスによって書き換えられません。最終的なキーワードを使用すると、コードの安定性とセキュリティが保証されます。

See all articles