PHP反復可能インターフェース
はじめに
イテレータ インターフェースは抽象を拡張しますTraversable インターフェース。 PHPには、多くの組み込みイテレータ(SPLイテレータと呼ばれる)が用意されています。 )多くのルーチン機能用。例はArrayIteratorです 、 DirectoryIterator イテレータインターフェイスを実装するユーザークラスは、その中で定義されている抽象メソッドを実装する必要があります。
構文
Iterator extends Traversable { /* Methods */ abstract public current ( void ) : mixed abstract public key ( void ) : scalar abstract public next ( void ) : void abstract public rewind ( void ) : void abstract public valid ( void ) : bool }
メソッド
Iterator ::current —現在の要素を返します
Iterator ::key —現在の要素のキーを返します
Iterator ::next —次の要素に進みます
Iterator ::rewind —イテレータを最初の要素に巻き戻します
Iterator ::valid —現在の位置が有効かどうかを確認します
IteratorAggregateを実装する場合 またはイテレータ Traversableを拡張するインターフェース。実装では、名前の前にリストする必要があります。 条項。
イテレータの例
次のPHPスクリプトでは、Interfaceを実装するクラスにプライベート変数として配列が含まれています。 Iteratorの抽象メソッドを実装すると、 foreachを使用して配列をトラバースできます。 next()でもループします メソッド。
例
<?php class myIterator implements Iterator { private $index = 0; private $arr = array(10,20,30,40); public function __construct() { $this->index = 0; } public function rewind() { $this->index = 0; } public function current() { return $this->arr[$this->index]; } public function key() { return $this->index; } public function next() { ++$this->index; } public function valid() { return isset($this->arr[$this->index]); } } ?>
foreachの使用 ループ、MyIteratorオブジェクトの配列プロパティを反復処理できます
$it = new myIterator(); foreach($it as $key => $value) { echo "$key=>". $value ."\n"; }
反復は、 next()をクリングすることによっても実行できます。 whileループのメソッド。必ず巻き戻ししてください ループを開始する前のイテレータ
例
$it->rewind(); do { echo $it->key() . "=>" .$it->current() . "\n"; $it->next(); } while ($it->valid());
出力
どちらの場合も、配列プロパティのトラバーサルは次の結果を示します
0=>10 1=>20 2=>30 3=>40
-
PHPのポリモーフィズムを説明します。
そもそも、ポリモーフィズムはギリシャ語のポリ(多くを意味する)と射(形を意味する)から得られます。 ポリモーフィズムは、同様のことを行うさまざまなクラスのメソッドが同様の名前を持つ必要があるオブジェクト指向プログラミングの例を示しています。ポリモーフィズムは本質的にOOPパターンであり、さまざまな機能を持つ多数のクラスがcommonInterfaceを実行または共有できるようにします。ポリモーフィズムの有用性は、異なるクラスで記述されたコードは、同じように使用されるため、どのクラスに属するかには影響しないことです。クラスがポリモーフィズムガイドラインを確実に実装するようにするために、抽象クラ
-
PHPのinterface_exists()関数
interface_exists()関数は、インターフェイスが定義されているかどうかを確認します。 name_of_interfaceで指定されたインターフェースが定義されている場合はTRUEを返し、そうでない場合はFALSEを返します。 構文 interface_exists(name_of_interface, autoload) パラメータ name_of_interface −インターフェース名。 自動読み込み −デフォルトで__autoloadを呼び出すかどうか 戻る name_of_interfaceで指定されたインターフェイスが定義されている場合、inter