PHP_PHP チュートリアルの 6 つの定義済みインターフェイスの紹介

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

PHPの6つの定義済みインターフェースの紹介

この記事では、PHPの6つの定義済みインターフェースの紹介を中心に、Traversable、Iterator、IteratorAggregate、ArrayAccess、Serializable、Closureについて説明します。ダウン

PHP には、以下に紹介する 6 つのインターフェースが事前定義されています。

1.トラバース可能なトラバーサルインターフェース

実際、これは PHP で使用できるインターフェースではありません。その目的の 1 つは、クラスを横断できるかどうかを検出することです。

?

1

2

3

if(Traversable の $class インスタンス) {

//foreach

}

2.イテレーターインターフェース

インターフェースの概要:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

Iterator は Traversable を拡張します

{

//現在のインデックスカーソルが指す要素を返します

抽象的な公共混合流(void)

//現在のインデックスカーソルが指す要素のキー名を返します

抽象公開スカラーキー(無効)

//現在のインデックス カーソルを次の要素を指すように移動します

抽象パブリック void next(void)

//最初の要素を指すようにインデックス カーソルをリセットします

抽象パブリック void rewind(void)

//現在のインデックス カーソルが要素を指しているかどうかを判断します。これは、rewind() または next() を呼び出すときによく使用されます

抽象パブリックブール値有効(void)

}

上記により、クラスで基本的な反復関数を実装できるようになります。次のように反復呼び出しシーケンスを確認できます。

?

3.IteratorAggregate集約反復子インターフェース
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

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

クラス myIterator は Iterator {

を実装します

プライベート $位置 = 0 ;

プライベート $array = array(

「最初の要素」、

「第 2 要素」、

「ラストエレメント」、

);

パブリック関数 __construct () {

$this -> 位置 = 0 ;

}

関数巻き戻し() {

var_dump ( __METHOD__ );

$this -> 位置 = 0 ;

}

関数現在の() {

var_dump ( __METHOD__ );

$this -> 配列 [ $this -> 位置 ];

;

}

ファンクションキー(){

var_dump ( __METHOD__ );

$this を返す -> 位置 ;

}

次の関数 () {

var_dump ( __METHOD__ );

++ $this ->

}

関数が有効です () {

var_dump ( __METHOD__ );

return isset( $this -> 配列 [ $this -> 位置 ]);

}

}

$it = 新しい myIterator ;

foreach( $it as $key => $value ) {

var_dump ( $key , $value );

エコー「ン」 ;

}

インターフェースの概要:

?

1

GetIterator は、Iterator または Traversable インターフェイスのクラスのインスタンスです。反復アクセスを実装するには、次のように外部反復子を取得します。

?

2

3

4

5

IteratorAggregate は Traversable を拡張します {

//外部イテレータを取得する

abstract public Traversable getIterator (void)

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

クラス myData は IteratorAggregate を実装します {

public $property1 = "公共プロパティ 1" ;

public $property2 = "公共プロパティ 2" ;

public $property3 = "公共プロパティ 3" ;

パブリック関数 __construct () {

$this -> property4 = "最後のプロパティ" ;

}

パブリック関数 getIterator () {

新しい ArrayIterator ( $this ) を返します;

}

}

$obj = 新しい myData ;

foreach( $obj as $key => $value ) {

var_dump ( $key , $value );

エコー「ン」 ;

}

4.ArrayAccess 配列アクセスインターフェース

インターフェースの概要:

?

1

2

3

4

5

6

7

配列アクセス {

/* メソッド */

abstract public boolean offsetExists (mixed $offset) //オフセット位置が存在するかチェック

abstract publicmixedoffsetGet(mixed$offset) //オフセット位置の値を取得します

abstract public void offsetSet (mixed $offset ,mixed $value ) //オフセット位置の値を設定します

abstract public void offsetUnset (mixed $offset) //オフセット位置の値をリセットします

}

オブジェクトは次のように配列のようにアクセスできます。

?

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

29

30

31

32

33

34

35

36

37

38

39

クラスobjはarrayaccessを実装します{

プライベート $container = array();

パブリック関数 __construct () {

$this -> コンテナ = 配列(

;

「1」 => 1 、

「2」 => 2 、

「3」 => 3 、

);

}

パブリック関数 offsetSet ( $offset , $value ) {

if ( is_null ( $offset )) {

$this -> コンテナ [] = $value ;

} 他 {

$this -> コンテナ [ $offset ] = $value ;

}

}

パブリック関数 offsetExists ( $offset ) {

return isset( $this ->container [ $offset ]);

}

パブリック関数 offsetUnset ( $offset ) {

unset( $this -> コンテナ [ $offset ]);

}

パブリック関数 offsetGet ( $offset ) {

return isset( $this -> コンテナ [ $offset ]) ? $this -> コンテナ [ $offset ] : null ;

}

}

$obj = 新しいオブジェクト ;

var_dump (isset( $obj [ "two" ]));

var_dump ( $obj [ "two" ]);

unset( $obj [ "two" ]);

var_dump (isset( $obj [ "two" ]));

$obj [ "two" ] = "値" ;

var_dump ( $obj [ "two" ]);

$obj [] = '追加 1' ;

$obj [] = '追加 2' ;

$obj [] = '追加 3' ;

print_r ( $obj );

5.直列化可能なシリアル化インターフェース

インターフェースの概要:

?

このインターフェースを実装するクラスは、__sleep() と __wakeup() をサポートしなくなりました。使い方は非常に簡単で、オブジェクトをシリアル化するときにserializeメソッドを呼び出し、逆シリアル化するときにunserializeメソッドを呼び出すだけです。

?

1

2

3

4

5

6

シリアル化可能{

/* メソッド */

abstract public stringserialize (void) //オブジェクトの文字列表現

abstract public mixed unserialize ( string $serialized ) // オブジェクトを構築します

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

クラスobjはSerializable {

を実装します

プライベート $データ ;

パブリック関数 __construct () {

$this -> data = "私の個人データ" ;

}

パブリック関数serialize() {

シリアル化を返す ( $this -> データ );

}

パブリック関数 unserialize ( $data ) {

$this -> データ = アンシリアル化 ( $data );

}

パブリック関数 getData() {

$this -> データを返す ;

;

}

}

$obj = 新しいオブジェクト ;

$ser = シリアル化 ( $obj );

print_r($ser);

$newobj = アンシリアライズ ( $ser );

print_r($newobj);

6.締めくくり

インターフェースの概要:

?

1

2

3

4

5

6

クロージング{

/* メソッド */

__construct (void) //インスタンス化を禁止するために使用されるコンストラクター

public static Closure binding ( Closure $closure , object $newthis [,mixed $newscope = 'static' ] ) //クロージャーをコピーし、指定された $this オブジェクトとクラス スコープをバインドします。

public Closure bindingTo ( object $newthis [,mixed $newscope = 'static' ] ) //現在のクロージャ オブジェクトをコピーし、指定された $this オブジェクトとクラス スコープをバインドします。

}

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

クラスA {

プライベート静的 $sfoo = 1 ;

プライベート $ifoo = 2;

}

$cl1 = 静的関数() {

A を返す :: $sfoo ;

};

$cl2 = function() {

$this を返します -> ifoo ;

;

};

$bcl1 = クロージャ :: バインド ( $cl1 , null , 'A' );

$bcl2 = クロージャ :: バインド ( $cl2 , new A (), 'A' );

エコー $bcl1 (), "n" ;

エコー $bcl2 (), "n" ;

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/1000103.html技術記事 PHP の 6 つの定義済みインターフェイスの紹介 この記事では、PHP の 6 つの定義済みインターフェイスの紹介を中心に、Traversable、Iterator、IteratorAggregate、ArrayAccess、Serializa...について説明します
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート