ホームページ  >  記事  >  バックエンド開発  >  PHPにおけるTraitの特徴と機能の共有

PHPにおけるTraitの特徴と機能の共有

小云云
小云云オリジナル
2018-03-02 09:42:251365ブラウズ

Traits は、PHP のような単一継承言語用に用意されたコード再利用メカニズムです。トレイトは、単一継承言語の制約を軽減し、開発者が異なる階層内の独立したクラスでメソッド セットを自由に再利用できるように設計されています。

PHP 5.4.0 以降、PHP は traits と呼ばれるコード再利用の方法を実装しています。

Traits は、PHP のような単一継承言語用に用意されたコード再利用メカニズムです。トレイトは、単一継承言語の制約を軽減し、開発者が異なる階層内の独立したクラスでメソッド セットを自由に再利用できるように設計されています。特性とクラス構成のセマンティクスは、複雑さを軽減し、従来の多重継承とミックスインに関連する典型的な問題を回避する方法を定義します。

Trait はクラスに似ていますが、きめ細かく一貫した方法で機能を組み合わせるようにのみ設計されています。特性を単独でインスタンス化することはできません。これは、従来の継承に水平機能の組み合わせを追加します。つまり、アプリケーション クラスのメンバーを継承する必要がありません。

Trait は PHP5.4 で追加されたもので、インターフェイスでもクラスでもありません。主に単一継承言語の制限を解決するためです。これは、PHP における多重継承の解決策です。たとえば、2 つの抽象クラスを同時に継承するのは非常に面倒です。Trait はこの問題を解決するように設計されています。 1 つ以上の既存のクラスに追加できます。クラスが実行できることを宣言し (インターフェイスの特性を示し)、特定の実装も含めます (クラスの特性を示します)

使い方は簡単

まず最初に、もちろん、PHP5.4 で追加された Trait を宣言します。特性キーワード

?

1

2

3

4


trait first_trait {trait first_trait {

function first_method() { /* Code Here */ }

function second_method() { /* Code Here */ }

関数 first_method() { /* コードはここにあります */ }

関数 second_method () { /* コードはここにあります */ }🎜

}

同時に、クラスで特性を使用したい場合は、 use キーワードを使用します

?

1

2

3

4

5

6

7

8


class first_class {

// 注意这行,声明使用 first_trait

use first_trait;

}

$obj = new first_class();

// Executing the method from trait

$obj->first_method(); // valid

$obj->second_method(); // valid

複数の特性を使用する

同じクラスで複数の特性を使用できます

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16


特性 first_traittrait first_trait

{

{

function first_method() { echo "method"; }

}

trait second_trait {

function second_method() { echo "method"; }

}

class first_class {

// now using more than one trait

use first_trait, second_trait;

}

$obj= new first_class();

// Valid

$obj->first_method(); // Print : method

// Valid

$obj->second_method(); // Print : method

トレイト間のネスト

同時に、

?

1

2

3

4のように、トレイト同士をネストすることもできます。

5

6

7

8

9

10

11

12

13

14

15

16


trait first_trait {trait first_trait {

function first_method() { echo "method"; }

関数 first_method() { echo "メソッド" ; }

}

trait second_trait {

use first_trait;

function second_method() { echo "method"; }

}

class first_class {

// now using

use second_trait;

}

$obj= new first_class();

// Valid

$obj->first_method(); // Print : method

// Valid

$obj->second_method(); // Print : method

Trait の抽象メソッド

Trait で実装する必要がある抽象メソッドを宣言できるため、それを使用するクラスはそれを実装する必要があります

?

1

2

3

4

5

6

7

8

9

10

11


trait first_trait {trait first_trait {

function first_method() { echo "method"; }

// 这里可以加入修饰符,说明调用类必须实现它

関数 first_method() { エコー "メソッド"; }

// 这里可以追加修饰符,说明调用类必须实现它🎜

abstract public function second_method();

}

class first_method {

use first_trait;

function second_method() {

/* Code Here */

}

}

特性の競合

複数の特性を同時に使用すると、必然的に競合が発生するため、これを解決する必要があります。 PHP5.4 では、文法の観点から関連するキーワード構文: 代わりにと as が導入されました。

11

12

13

14

15

16

17

18

19

20

21


trait first_trait {

function first_function() {

echo "From First Trait";

}

}

trait second_trait {

// 这里的名称和 first_trait 一样,会有冲突

function first_function() {

echo "From Second Trait";

}

}

class first_class {

use first_trait, second_trait {

// 在这里声明使用 first_trait 的 first_function 替换

// second_trait 中声明的

first_trait::first_function insteadof second_trait;

}

}

$obj = new first_class();

// Output: From First Trait

$obj->first_function();

上記はトレイトの基本的な使い方です。詳しくは公式マニュアルを参照してください。注意すべき点がいくつかあります:

Trait は呼び出しクラスによって継承された親クラスのメソッドをオーバーライドします


Trait はクラスのような new を使用してインスタンス化できません


1 つの Trait は複数の Traits で構成できます


In単一のクラスで、複数のトレイトを使用できます


トレイトは、final、static、abstract などの修飾子をサポートしています


トレイト間の競合を解決するために、演算子の代わりにおよび演算子として使用できます

関連する推奨事項:

概要について 詳細な説明PHP のトレイトとそのアプリケーションについて

PHP のトレイトの問題について

PHP でのトレイト再利用メカニズムの使用の詳細な説明

以上がPHPにおけるTraitの特徴と機能の共有の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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