ホームページ  >  記事  >  バックエンド開発  >  PHPデザインパターンの話:イテレータパターン(5)_PHPチュートリアル

PHPデザインパターンの話:イテレータパターン(5)_PHPチュートリアル

WBOY
WBOYオリジナル
2016-07-13 17:44:13717ブラウズ

注意,迭代器是比对象集更好的抽象,因为我们可以让InfiniteIterators,NoRewindIterators等,不用与普通数组阵列与一致,因此,Iterator缺少count()函数等功能。
在PHP官方手册中可以找到完整的SPL迭代器列表。得益于对PHP的强力支持,使用迭代器模式的大部分工作都包括在标准实现中,下面的代码示例就利用了标准Iterator和RecursiveIterators的功能。

___FCKpd___0___FCKpd___1

// lets play with RecursiveIterator implementations  $it = new RecursiveArrayIterator(array(      A,      B,      array(          C,          D      ),      array(          array(              E,              F          ),          array(              G,              H,              I          )      )  ));  // $it is a RecursiveIterator but also an Iterator,  // so it loops normally over the four elements  // of the array.  echo "Foreach over a RecursiveIterator: ";  foreach ($it as $value) {      echo $value;      // but RecursiveIterators specify additional      // methods to explore children nodes      $children = $it->hasChildren() ? {Yes} : {No};      echo $children, ;  }  echo " ";  // we can bridge it to a different contract via  // a RecursiveIteratorIterator, whose cryptic name  // should be read as an Iterator that spans over  // a RecursiveIterator.  echo "Foreach over a RecursiveIteratorIterator: ";  foreach (new RecursiveIteratorIterator($it) as $value) {      echo $value;  }  echo " "; 原文名:Practical Php Patterns: Iterator        作者:Giorgio

content; 
    private $_index = 0; 
 
    public function __construct(array $content) 
    { 
        $this->_content = $content; 
    } 
 
    public function rewind() 
    { 
        $this->_index = 0; 
    } 
 
    public function valid() 
    { 
        return isset($this->_content[$this->_index]); 
    } 
 
    public function current() 
    { 
        return $this->_content[$this->_index]; 
    } 
 
    public function key() 
    { 
        return $this->_index; 
    } 
 
    public function next() 
    { 
        $this->_index++; 
    } 

 
$arrayarray = array(A, B, C, D); 
echo "Collection: "; 
foreach (new Collection($array) as $key => $value) { 
    echo "$key => $value. "; 

echo " ";
___FCKpd___1___FCKpd___2原文名:Practical Php Patterns: Iterator        作者:Giorgio

コンテンツ; 

public function __construct(array $content)
{
$this->_content = $content; 
}

public function contains($number)
{
return in_array($number, $this->_content); 
}

/** 
※ IteratorAggregate を実装するにはこのメソッドのみが必要です。 
* @return イテレータ
    */
public function getIterator()
{
return new ArrayIterator($this->_content); 
}
}

echo "NumbersSet: "; 
foreach (new NumbersSet($array) as $key => $value) {
echo "$key => $value. "; 
}
エコー " ";
___FCKpd___2原文名:実践的な PHP パターン: イテレータ 作成者:Giorgio

コンテンツ; 
プライベート $_index = 0; 

public function __construct(array $content)
{
$this->_content = $content; 
}

パブリック関数 rewind()
{
$this->_index = 0; 
}

public function valid()
{
return isset($this->_content[$this->_index]); 
}

パブリック関数 current()
{
return $this->_content[$this->_index]; 
}

公開関数キー()
{
return $this->_index; 
}

パブリック関数 next()
{
$this->_index++; 
}
}

$arrayarray = array(A, B, C, D); 
エコー "コレクション: "; 
foreach (new Collection($array) as $key => $value) {
echo "$key => $value. "; 
}
エコー " ";
___FCKpd___1___FCKpd___2

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/478773.html技術記事注意,迭代器はより良い抽象です,InfiniteIterators,NoRewindIterators 等,普通の数組と一致しないため,Iterator の数が少ないです...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。