From: Marcus Boerger Date: Wed, 16 Jul 2003 21:52:03 +0000 (+0000) Subject: Update examples X-Git-Tag: BEFORE_ARG_INFO~213 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d8943e513c2c74ee3bf2c6e1c283ff40079b326a;p=php Update examples --- diff --git a/ext/spl/examples/dba_dump.php b/ext/spl/examples/dba_dump.php index 0481d15a92..77ea2008bd 100755 --- a/ext/spl/examples/dba_dump.php +++ b/ext/spl/examples/dba_dump.php @@ -2,63 +2,25 @@ /* dba dump utility * - * Usage php dba_dump + * Usage: php dba_dump [] + * + * Show all groups in the ini file specified by . + * The regular expression is used to filter the by setting name. * * Note: configure with --enable-dba * * (c) Marcus Boerger */ -class dba_reader implements spl_sequence_assoc -{ - - private $db = NULL; - private $key = false; - private $val = false; - - function __construct($file, $handler) { - $this->db = dba_open($file, 'r', $handler); - } - - function __destruct() { - if ($this->db) { - dba_close($this->db); - } - } - - function rewind() { - if ($this->db) { - $this->key = dba_firstkey($this->db); - } - } +require_once("dba_reader.inc"); +require_once("key_filter.inc"); - function current() { - return $this->val; - } - - function next() { - if ($this->db) { - $this->key = dba_nextkey($this->db); - if ($this->key !== false) { - $this->val = dba_fetch($this->key, $this->db); - } - } - } - - function has_more() { - if ($this->db && $this->key !== false) { - return true; - } else { - return false; - } - } +$db = new dba_reader($argv[1], $argv[2]); - function key() { - return $this->key; - } +if ($argc>3) { + $db = new key_filter($db, $argv[3]); } -$db = new dba_reader($argv[1], $argv[2]); foreach($db as $key => $val) { echo "'$key' => '$val'\n"; } diff --git a/ext/spl/examples/dba_reader.inc b/ext/spl/examples/dba_reader.inc new file mode 100755 index 0000000000..e31960a54d --- /dev/null +++ b/ext/spl/examples/dba_reader.inc @@ -0,0 +1,83 @@ +db = dba_open($file, 'r', $handler); + } + + /** + * Close database. + */ + function __destruct() { + if ($this->db) { + dba_close($this->db); + } + } + + /** + * Rewind to first element. + */ + function rewind() { + if ($this->db) { + $this->key = dba_firstkey($this->db); + } + } + + /** + * @return Current data. + */ + function current() { + return $this->val; + } + + /** + * Move to next element. + * + * @return void + */ + function next() { + if ($this->db) { + $this->key = dba_nextkey($this->db); + if ($this->key !== false) { + $this->val = dba_fetch($this->key, $this->db); + } + } + } + + /** + * @return Whether more elements are available. + */ + function has_more() { + if ($this->db && $this->key !== false) { + return true; + } else { + return false; + } + } + + /** + * @return Current key. + */ + function key() { + return $this->key; + } +} + +?> \ No newline at end of file diff --git a/ext/spl/examples/filter.inc b/ext/spl/examples/filter.inc index 23fe38cbae..5aae419caf 100755 --- a/ext/spl/examples/filter.inc +++ b/ext/spl/examples/filter.inc @@ -1,8 +1,8 @@ [] + * + * Show all groups in the ini file specified by . + * The regular expression is used to filter the result. + * + * Note: configure with --enable-dba + * + * (c) Marcus Boerger + */ + +require_once("dba_reader.inc"); +require_once("key_filter.inc"); + +/** + * @brief Class to iterate all groups within an ini file. + * @author Marcus Boerger + * @version 1.0 + * + * Using this class you can iterator over all groups of a ini file. + * + * This class uses a 'is-a' relation to key_filter in contrast to a 'has-a' + * relation. Doing so both current() and key() methods must be overwritten. + * If it would use a 'has-a' relation there would be much more to type... + * but for puritists that would allow correctness in so far as then no + * key() would be needed. + */ +class ini_groups extends key_filter +{ + /** + * Construct an ini file group iterator from a filename. + * + * @param file Ini file to open. + */ + function __construct($file) { + parent::__construct(new dba_reader($file, 'inifile'), '^\[.*\]$'); + } + + /** + * @return The current group. + */ + function current() { + return substr(parent::key(),1,-1); + } + + /** + * @return The current group. + */ + function key() { + return substr(parent::key(),1,-1); + } +} + +$it = new ini_groups($argv[1]); +if ($argc>2) { + $it = new key_filter($it, $argv[2]); +} +foreach($it as $group) { + echo "$group\n"; +} + +?> \ No newline at end of file diff --git a/ext/spl/examples/key_filter.inc b/ext/spl/examples/key_filter.inc new file mode 100755 index 0000000000..e8c4e42edc --- /dev/null +++ b/ext/spl/examples/key_filter.inc @@ -0,0 +1,102 @@ +rewind(); + } + $this->it = $it; + $this->regex = $regex; + $this->fetch(); + } + + /** + * Destruct the iterator. + */ + function __destruct() { + unset($this->it); + } + + /** + * Fetch next element and store it. + * + * @return void + */ + protected function fetch() { + $this->key = false; + $this->curr = false; + while ($this->it->has_more()) { + $key = $this->it->key(); + if (ereg($this->regex, $key)) { + $this->key = $key; + $this->curr = $this->it->current(); + return; + } + $this->it->next(); + }; + } + + /** + * Move to next element + * + * @return void + */ + function next() { + $this->it->next(); + $this->fetch(); + } + + /** + * @return Whether more elements are available + */ + function has_more() { + return $this->key !== false; + } + + /** + * @return The current key + */ + function key() { + return $this->key; + } + + /** + * @return The current value + */ + function current() { + return $this->curr; + } + + /** + * hidden __clone + */ + protected function __clone() { + // disallow clone + } +} + +?> \ No newline at end of file diff --git a/ext/spl/examples/sub_dir.inc b/ext/spl/examples/sub_dir.inc index 74477c82eb..b18ddbfe41 100755 --- a/ext/spl/examples/sub_dir.inc +++ b/ext/spl/examples/sub_dir.inc @@ -1,8 +1,8 @@