PHP_PHP チュートリアルのトレイトを使用したコード再利用の例

WBOY
リリース: 2016-07-13 09:53:47
オリジナル
1085 人が閲覧しました

コードの再利用を実装するためのPHPのトレイトの使用例

この記事では、コードの再利用を実装するためのPHPのトレイトの使用例を主に紹介します。この記事では、トレイトの簡単な使用方法、優先順位の問題、複数のトレイトの競合について説明します。メソッドのアクセス制御を変更したり、Traits で Traits を使用したりするために使用されます。必要な友達はそれを参照できます

コード再利用メカニズムを実装するために PHP5.4 以降にトレイトが追加されます。トレイトはクラスに似ていますが、インスタンス化することはできず、クラスに導入するために use を使用するだけで済みます。特性は「、」で導入できます。

(1)トレイトが使いやすい

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

特性A {

パブリック $var1 = 'test1';

パブリック関数 test1() {

エコー '特性 A::test1()';

}

}

特性B{

パブリック $var2 = 'test2';

パブリック関数 test2() {

エコー '特性 B::test2()';

}

}

クラスC {

A、Bを使用します;

}

$c = 新しい C();

echo $c->var1; //test1

$c->test2(); //トレイト B::test2()

(2)優先課題

Trait は継承されたメソッドをオーバーライドし、現在のクラスは Trait メソッドをオーバーライドします。

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

特性A {

パブリック $var1 = 'テスト';

パブリック関数 test() {

エコー 'A::test()';

}

パブリック関数 test1() {

エコー 'A::test1()';

}

}

クラスB{

パブリック関数 test() {

エコー 'B::test()';

}

パブリック関数 test1() {

エコー 'B::test1()';

}

}

クラス C は B を拡張します{

Aを使用します;

パブリック関数 test() {

エコー 'c::test()';

}

}

$c = 新しい C();

$c->test(); //c::test()

$c->test1() //A::test1()

(3) 複数の特性の競合

競合が解決されない場合、致命的なエラーが発生します。

競合でどのメソッドを使用するかを指定するには、代わりに使用します。

as 演算子を使用して、競合するメソッドの名前を変更できます

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

特性A {

パブリック関数 test() {

エコー 'A::test()';

}

}

特性B{

パブリック関数 test() {

エコー 'B::test()';

}

}

クラスC {

A、Bを使用する{

A;

の代わりにB::test

B::test as ;

}

}

$c = 新しい C();

$c->test(); //B::test()

$c->t(); //B::test() の名前は

で変更できます

(4)メソッドのアクセス制御を変更するために使用できます

?

(5) TraitはTraitで使用されます
1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

特性 HelloWorld {

パブリック関数sayHello() {

「ハローワールド!」をエコーし​​ます ;

}

}

//sayHello

のアクセス制御を変更します

クラスA {

HelloWorld {sayHello を保護として使用します。

}

//アクセス制御を変更するエイリアスをメソッドに与えます

//元のsayHelloのアクセス制御は変更されていません

クラスB{

HelloWorld {sayHello をプライベート myPrivateHello として使用します

;

}

$b = 新しい A();

$b->sayHello(); //致命的なエラー: コンテキスト ''

から保護されたメソッド A::sayHello() を呼び出します

?

1

(6) Trait は抽象メソッドと静的メソッドをサポートしています。静的変数を直接定義することはできませんが、静的変数はトレイト メソッドによって参照できます。

?

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

特性A {

パブリック関数 test1() {

エコー 'test1';

}

}

特性B{

パブリック関数 test2() {

エコー 'test2';

}

}

特性 C {

A、Bを使用します;

}

クラスD{

Cを使用します;

}

$d = 新しい D();

$d->test2() //テスト2

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

特性A {

パブリック関数 test1() {

静的 $a = 0;

$a++;

$aをエコー;

}

抽象パブリック関数 test2(); //定義可能な抽象メソッド

}

クラスB{

Aを使用します;

パブリック関数 test2() {

}

}

$b = 新しい B();

$b->test1(); //1

$b->test1(); //2

(7)Traitでは属性を定義できますが、クラス内に同名の属性を定義することはできません

?

1

2

3

4

5

6

7

8

特性A {

公開 $test1;

}

クラスB{

Aを使用します;

公開 $test2;

http://www.bkjia.com/PHPjc/1000095.htmlwww.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/1000095.html技術記事 PHP でコードの再利用を実装するためのトレイトの使用例 この記事では、PHP でコードの再利用を実装するためのトレイトの使用例を中心に紹介します。 この記事では、トレイトの簡単な使い方、優先順位の問題、複数のトレイトについて説明します...
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート