コード再利用の詳細な説明 Trait の使用手順

php中世界最好的语言
リリース: 2023-03-23 15:20:02
オリジナル
1573 人が閲覧しました

今回は、Traits をコードの再利用に使用する手順について詳しく説明します。コードの再利用に Traits を使用する場合の 注意事項 は何ですか?実際のケースを見てみましょう。

PHP バージョン 5.4.0 以降、PHP はコード再利用の新しい概念である Trait を提供します。 Trait は文字通り「特性」「特性」を意味します。Trait キーワードを使用すると、PHP のクラスに新しい特性を追加できることがわかります。

オブジェクト指向

に詳しい人なら誰でも、ソフトウェア開発で一般的に使用されるコードの再利用には継承とポリモーフィズムという 2 つの方法があることを知っています。 PHP では、単一継承のみを実現できます。特性はこれを回避します。以下、簡単な例で比較説明します。

1. 継承 VS ポリモーフィズム VS トレイト

現在、Publish.php と Answer.php の 2 つのクラスがあります。 LOG 関数を追加するには、クラス内のアクションを記録します。いくつかのオプションがあります:

    継承
  1. 多態性
  2. 特性
  3. 1.1. 継承

コード構造は次のとおりです:

// Log.php<?phpClass Log{ publicfunctionstartLog() {  // echo ... } publicfunctionendLog() {  // echo ... }}    
// Publish.php<?phpClass PublishextendsLog{}    
// Answer.php<?phpClass AnswerextendsLog{}
ログイン後にコピー

1.2。

実装コード:

// Log.php<?phpInterface Log{ publicfunctionstartLog(); publicfunctionendLog();}    
// Publish.php<?phpClass PublishimplementsLog{ publicfunctionstartLog() {  // TODO: Implement startLog() method. } publicfunctionendLog() {  // TODO: Implement endLog() method. }}    
// Answer.php<?phpClass AnswerimplementsLog{ publicfunctionstartLog() {  // TODO: Implement startLog() method. } publicfunctionendLog() {  // TODO: Implement endLog() method. }}
ログイン後にコピー
1.3. 特性

実装コードは次のとおりです:

// Log.php<?phptrait Log{ publicfunctionstartLog() {  // echo .. } publicfunctionendLog() {  // echo .. }}    
// Publish.php<?phpclassPublish { useLog;}$publish=newPublish();$publish->startLog();$publish->endLog();    
// Answer.php<?phpclassAnswer { useLog;}$answer=newAnswer();$answer->startLog();$answer->endLog();
ログイン後にコピー

1.4. 結論


継承メソッドでも問題は解決できますが、そのアイデアはオブジェクト指向の原則に違反しており、非常に粗雑な方法です。これも実現可能ですが、ソフトウェア開発における DRY 原則に準拠しておらず、メンテナンスコストが増加します。 trait メソッドは上記の欠点を回避し、比較的エレガントにコードの再利用を実現します。

2. トレイトのスコープ

トレイトの利点を理解した後、まずスコープについて説明します。これを証明するのは簡単です。実装コードは次のとおりです。

<?phpclassPublish { useLog; publicfunctiondoPublish() 
{  $this->publicF();  $this->protectF();  $this->privateF(); }}
$publish=newPublish();$publish->doPublish();    
publicfunctionprotectedfunctionprivatefunction
ログイン後にコピー

Trait クラスの reference
内に Trait のスコープが表示されていることがわかります。 use キーワードは、Trait を参照するクラスに Trait の実装コードをコピーしていることがわかります。

3. Trait の属性の

優先順位 優先順位に関しては、ここでの参照オブジェクトは Trait クラスとその親クラスを指します。 。

次のコードは、トレイト アプリケーションの属性の優先順位を証明するために使用されます:

<?phptrait Log{ publicfunctionpublicF() 
{  echoMETHOD.&#39; public function&#39;. PHP_EOL; } protectedfunctionprotectF() 
{  echoMETHOD.&#39; protected function&#39;. PHP_EOL; }}classQuestion{ publicfunctionpublicF() 
{  echoMETHOD.&#39; public function&#39;. PHP_EOL; } protectedfunctionprotectF() 
{  echoMETHOD.&#39; protected function&#39;. PHP_EOL; }}classPublishextendsQuestion{ useLog; publicfunctionpublicF() 
{  echoMETHOD.&#39; public function&#39;. PHP_EOL; } publicfunctiondoPublish() {  $this->publicF();  $this->protectF(); }}
$publish=newPublish();$publish->doPublish();    
上述代码的输出结果如下:
Publish::publicFpublicfunctionLog::protectFprotectedfunction
ログイン後にコピー

現在のクラスのメンバーはトレイトのメソッドをオーバーライドします


トレイトは継承されたメソッドをオーバーライドします

クラス メンバーの優先順位は次のとおりです: 現在のクラス > ;Trait>Parent Class

文字通りの意味と同じように、restituteof キーワードは後者を前者に置き換え、as キーワードは置き換えられたメソッドにエイリアスを与えます。


Trait を参照するときは use キーワードが使用され、また use キーワードは

名前空間

を参照するためにも使用されます。 2 つの違いは、Trait を参照するときにクラス内で使用されることです。 この記事の事例を読んだ後は、この方法を習得したと思います。さらに興味深い情報については、php 中国語 Web サイトの他の関連記事に注目してください。

推奨読書:

PHPで配列内のnull値または空の要素を削除する方法


phpはログ機能を実装しています


以上がコード再利用の詳細な説明 Trait の使用手順の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート