スポンサーリンク

PHPのデザインパターン「Iteratorパターン」のサンプルコード。

<?php
class user {
	private $name;
	private $admin;
	public function __construct($name, $admin = false) {
		$this->name = $name;
		$this->admin = $admin;
	}
	public function __destruct() { }
	public function getName() {
		return $this->name;
	}
	public function getAdmin() {
		return $this->admin;
	}
}

class users implements IteratorAggregate {
	private $users;
	public function __construct() {
		$this->users = new ArrayObject();
	}
	public function __destruct() { }
	public function add(user $user) {
		$this->users[] = $user;
	}
	public function getIterator() {
		return $this->users->getIterator();
	}
}

class AdminIterator extends FilterIterator {
	public function __construct($iterator) {
		parent::__construct($iterator);
	}
	public function accept() {
		$user = $this->current();
		return ($user->getAdmin() === true);
	}
}

function dump_user($iterator) {
	foreach ($iterator as $user) {
		echo $user->getName(), PHP_EOL;
	}
}
function dump_user2($iterator) {
	while($iterator->valid()) {
		$user = $iterator->current();
		echo $user->getName(), PHP_EOL;
		$iterator->next();
	}
}

function test1() {
	$users = new users();
	$users->add(new user('a', false));
	$users->add(new user('b', false));
	$users->add(new user('c', false));
	$users->add(new user('x', true));
	$users->add(new user('y', true));
	$users->add(new user('z', true));

	$iterator = $users->getIterator();
	echo 'all user', PHP_EOL;
	dump_user2($iterator);
	echo 'all user', PHP_EOL;
	dump_user($iterator);
	echo 'admin user', PHP_EOL;
	dump_user(new AdminIterator($iterator));
}
test1();
?>

以上 PHPのデザインパターン「Iteratorパターン」のサンプルコードでした。
参照しているページ (サイト内): [2008-01-31-1]

スポンサーリンク
スポンサーリンク
 
いつもシェア、ありがとうございます!


もっと情報を探しませんか?

関連記事

最近の記事

人気のページ

はてなの人気のブックマーク

スポンサーリンク
 

過去ログ

2018 : 01 02 03 04 05 06 07 08 09 10 11 12
2017 : 01 02 03 04 05 06 07 08 09 10 11 12
2016 : 01 02 03 04 05 06 07 08 09 10 11 12
2015 : 01 02 03 04 05 06 07 08 09 10 11 12
2014 : 01 02 03 04 05 06 07 08 09 10 11 12
2013 : 01 02 03 04 05 06 07 08 09 10 11 12
2012 : 01 02 03 04 05 06 07 08 09 10 11 12
2011 : 01 02 03 04 05 06 07 08 09 10 11 12
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
2004 : 01 02 03 04 05 06 07 08 09 10 11 12
2003 : 01 02 03 04 05 06 07 08 09 10 11 12

サイト

Vim入門

C言語入門

C++入門

JavaScript/Node.js入門

Python入門

FreeBSD入門

Ubuntu入門

セキュリティ入門

パソコン自作入門

ブログ

トップ


プライバシーポリシー