From: Peter Kokot Date: Wed, 26 Sep 2018 13:35:38 +0000 (+0200) Subject: Remove and refactor ext/spl/examples X-Git-Tag: php-7.4.0alpha1~1803^2~14 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=80c6ba26e3fe83174a0e7dce367d8a39aa093ae1;p=php Remove and refactor ext/spl/examples - Test file from ext/spl/examples has been moved to ext/spl/tests - Other custom SPL examples and implementations were removed in favor of the PHP manual. --- diff --git a/ext/spl/README b/ext/spl/README index f946f837f8..39f3215bc8 100644 --- a/ext/spl/README +++ b/ext/spl/README @@ -1,7 +1,4 @@ This is an extension that aims to implement some efficient data access -interfaces and classes. You'll find the classes documented using php -code in the corresponding .inc files in the examples subdirectory. Based -on the internal implementations or the files in the examples subdirectory -there are also some .php files to experiment with. +interfaces and classes. For more information look at: http://php.net/manual/en/book.spl.php diff --git a/ext/spl/examples/autoload.inc b/ext/spl/examples/autoload.inc deleted file mode 100644 index 2ccd0d1be8..0000000000 --- a/ext/spl/examples/autoload.inc +++ /dev/null @@ -1,50 +0,0 @@ - \ No newline at end of file diff --git a/ext/spl/examples/cachingrecursiveiterator.inc b/ext/spl/examples/cachingrecursiveiterator.inc deleted file mode 100644 index 4fa6b235c3..0000000000 --- a/ext/spl/examples/cachingrecursiveiterator.inc +++ /dev/null @@ -1,28 +0,0 @@ - \ No newline at end of file diff --git a/ext/spl/examples/callbackfilteriterator.inc b/ext/spl/examples/callbackfilteriterator.inc deleted file mode 100644 index 51757012ec..0000000000 --- a/ext/spl/examples/callbackfilteriterator.inc +++ /dev/null @@ -1,122 +0,0 @@ -callback = $callback; - $this->mode = $mode; - $this->flags = $flags; - } - - /** Call the filter callback - * @return result of filter callback - */ - public function accept() - { - $this->key = parent::key(); - $this->current = parent::current(); - - switch($this->mode) { - default: - case self::USE_FALSE; - return false; - case self::USE_TRUE: - return true; - case self::USE_VALUE: - if($this->flags & self::REPLACE) { - return (bool) call_user_func($this->callback, &$this->current); - } else { - return (bool) call_user_func($this->callback, $this->current); - } - case self::USE_KEY: - if($this->flags & self::REPLACE) { - return (bool) call_user_func($this->callback, &$this->key); - } else { - return (bool) call_user_func($this->callback, $this->key); - } - case SELF::USE_BOTH: - if($this->flags & self::REPLACE) { - return (bool) call_user_func($this->callback, &$this->key, &$this->current); - } else { - return (bool) call_user_func($this->callback, $this->key, $this->current); - } - } - } - - /** @return current key value */ - function key() - { - return $this->key; - } - - /** @return current value */ - function current() - { - return $this->current; - } - - /** @return operation mode */ - function getMode() - { - return $this->mode; - } - - /** @param $mode set new mode, @see mode */ - function setMode($mode) - { - $this->mode = $mode; - } - - /** @return operation flags */ - function getFlags() - { - return $this->flags; - } - - /** @param $flags set new flags, @see flags */ - function setFlags($flags) - { - $this->flags = $flags; - } -} - -?> \ No newline at end of file diff --git a/ext/spl/examples/class_tree.php b/ext/spl/examples/class_tree.php deleted file mode 100755 index fc021d5c01..0000000000 --- a/ext/spl/examples/class_tree.php +++ /dev/null @@ -1,113 +0,0 @@ - - * - * Simply specify the root class or interface to tree with parameter \. - */ - -if ($argc < 2) { - echo << - -Displays a graphical tree for the given . - - The class or interface for which to generate the tree graph. - - -EOF; - exit(1); -} - -if (!class_exists("RecursiveTreeIterator", false)) require_once("recursivetreeiterator.inc"); - -/** \brief Collects sub classes for given class or interface - */ -class SubClasses extends RecursiveArrayIterator -{ - /** @param base base class to collect sub classes for - * @param check_interfaces whether we deal with interfaces - */ - function __construct($base, $check_interfaces = false) - { - foreach(get_declared_classes() as $cname) - { - $parent = get_parent_class($cname); - if (strcasecmp($parent, $base) == 0) - { - $this->offsetSet($cname, new SubClasses($cname)); - } - if ($check_interfaces) - { - if ($parent) - { - $parent_imp = class_implements($parent); - } - foreach(class_implements($cname) as $iname) - { - if (strcasecmp($iname, $base) == 0) - { - if (!$parent || !in_array($iname, $parent_imp)) - { - $this->offsetSet($cname, new SubClasses($cname)); - } - } - } - } - } - if ($check_interfaces) - { - foreach(get_declared_interfaces() as $cname) - { - foreach(class_implements($cname) as $iname) - { - if (strcasecmp($iname, $base) == 0) - { - $this->offsetSet($cname, new SubClasses($cname, true)); - } - } - } - } - $this->uksort('strnatcasecmp'); - } - - /** @return key() since that is the name we need - */ - function current() - { - $result = parent::key(); - $parent = get_parent_class($result); - if ($parent) - { - $interfaces = array_diff(class_implements($result), class_implements($parent)); - if ($interfaces) - { - $implements = array(); - foreach($interfaces as $interface) - { - $implements = array_merge($implements, class_implements($interface)); - } - $interfaces = array_diff($interfaces, $implements); - natcasesort($interfaces); - $result .= ' (' . join(', ', $interfaces) . ')'; - } - } - return $result; - } -} - -$it = new RecursiveTreeIterator(new SubClasses($argv[1], true)); - -echo $argv[1]."\n"; -foreach($it as $c=>$v) -{ - echo "$v\n"; -} - -?> \ No newline at end of file diff --git a/ext/spl/examples/dba_array.php b/ext/spl/examples/dba_array.php deleted file mode 100755 index 346ac1f2f7..0000000000 --- a/ext/spl/examples/dba_array.php +++ /dev/null @@ -1,52 +0,0 @@ - \ \ [\] - * - * If \ is specified then \ is set to \ in \. - * Else the value of \ is printed only. - * - * Note: configure with --enable-dba - */ - -if ($argc < 4) { - echo << [] - -If is specified then is set to in . -Else the value of is printed only. - - -EOF; - exit(1); -} - -if (!class_exists("DbaReader", false)) require_once("dbareader.inc"); - -try { - if ($argc > 2) { - $dba = new DbaArray($argv[1], $argv[2]); - if ($dba && $argc > 3) { - if ($argc > 4) { - $dba[$argv[3]] = $argv[4]; - } - var_dump(array('Index' => $argv[3], 'Value' => $dba[$argv[3]])); - } - unset($dba); - } - else - { - echo "Not enough parameters\n"; - exit(1); - } -} -catch (exception $err) { - var_dump($err); - exit(1); -} -?> \ No newline at end of file diff --git a/ext/spl/examples/dba_dump.php b/ext/spl/examples/dba_dump.php deleted file mode 100755 index 2c698d427a..0000000000 --- a/ext/spl/examples/dba_dump.php +++ /dev/null @@ -1,42 +0,0 @@ - \ [\] - * - * 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 - */ - -if ($argc < 3) { - echo << [] - -Show all groups in the ini file specified by . -The regular expression is used to filter the by setting name. - - -EOF; - exit(1); -} - -if (!class_exists("DbaReader", false)) require_once("dbareader.inc"); -if (!class_exists("KeyFilter", false)) require_once("keyfilter.inc"); - -$db = new DbaReader($argv[1], $argv[2]); - -if ($argc>3) { - $db = new KeyFilter($db, $argv[3]); -} - -foreach($db as $key => $val) { - echo "'$key' => '$val'\n"; -} - -?> \ No newline at end of file diff --git a/ext/spl/examples/dbaarray.inc b/ext/spl/examples/dbaarray.inc deleted file mode 100644 index d6ee56f442..0000000000 --- a/ext/spl/examples/dbaarray.inc +++ /dev/null @@ -1,95 +0,0 @@ -db = dba_popen($file, "c", $handler); - if (!$this->db) { - throw new exception("Databse could not be opened"); - } - } - - /** - * Close database. - */ - function __destruct() - { - parent::__destruct(); - } - - /** - * Read an entry. - * - * @param $name key to read from - * @return value associated with $name - */ - function offsetGet($name) - { - $data = dba_fetch($name, $this->db); - if($data) { - //return unserialize($data); - return $data; - } - else - { - return NULL; - } - } - - /** - * Set an entry. - * - * @param $name key to write to - * @param $value value to write - */ - function offsetSet($name, $value) - { - //dba_replace($name, serialize($value), $this->db); - dba_replace($name, $value, $this->db); - return $value; - } - - /** - * @return whether key $name exists. - */ - function offsetExists($name) - { - return dba_exists($name, $this->db); - } - - /** - * Delete a key/value pair. - * - * @param $name key to delete. - */ - function offsetUnset($name) - { - return dba_delete($name, $this->db); - } -} - -?> diff --git a/ext/spl/examples/dbareader.inc b/ext/spl/examples/dbareader.inc deleted file mode 100644 index 01de37e990..0000000000 --- a/ext/spl/examples/dbareader.inc +++ /dev/null @@ -1,96 +0,0 @@ -db = dba_open($file, 'r', $handler)) { - throw new exception('Could not open file ' . $file); - } - } - - /** - * Close database. - */ - function __destruct() { - dba_close($this->db); - } - - /** - * Rewind to first element. - */ - function rewind() { - $this->key = dba_firstkey($this->db); - $this->fetch_data(); - } - - /** - * Move to next element. - * - * @return void - */ - function next() { - $this->key = dba_nextkey($this->db); - $this->fetch_data(); - } - - /** - * Fetches the current data if $key is valid - */ - private function fetch_data() { - if ($this->key !== false) { - $this->val = dba_fetch($this->key, $this->db); - } - } - - /** - * @return Current data. - */ - function current() { - return $this->val; - } - - /** - * @return Whether more elements are available. - */ - function valid() { - 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/directoryfilterdots.inc b/ext/spl/examples/directoryfilterdots.inc deleted file mode 100644 index 454bd90883..0000000000 --- a/ext/spl/examples/directoryfilterdots.inc +++ /dev/null @@ -1,45 +0,0 @@ -getInnerIterator()->isDot(); - } - - /** @return the current entries path name - */ - function key() - { - return $this->getInnerIterator()->getPathname(); - } -} - -?> diff --git a/ext/spl/examples/directorygraphiterator.inc b/ext/spl/examples/directorygraphiterator.inc deleted file mode 100644 index 3f0bb263e2..0000000000 --- a/ext/spl/examples/directorygraphiterator.inc +++ /dev/null @@ -1,34 +0,0 @@ - \ No newline at end of file diff --git a/ext/spl/examples/directorytree.inc b/ext/spl/examples/directorytree.inc deleted file mode 100644 index 7bd9c2c597..0000000000 --- a/ext/spl/examples/directorytree.inc +++ /dev/null @@ -1,27 +0,0 @@ - \ No newline at end of file diff --git a/ext/spl/examples/directorytree.php b/ext/spl/examples/directorytree.php deleted file mode 100755 index dc26d6cc22..0000000000 --- a/ext/spl/examples/directorytree.php +++ /dev/null @@ -1,37 +0,0 @@ - [\ [\]] - * - * Simply specify the path to tree with parameter \. - */ - -if ($argc < 2) { - echo << - -Displays a graphical directory tree for the given . - - The directory for which to generate the directory tree graph. - - -EOF; - exit(1); -} - -if (!class_exists("DirectoryTreeIterator", false)) require_once("directorytreeiterator.inc"); - -$length = $argc > 3 ? $argv[3] : -1; - -echo $argv[1]."\n"; -foreach(new LimitIterator(new DirectoryTreeIterator($argv[1]), @$argv[2], $length) as $key=>$file) { -//foreach(new DirectoryTreeIterator($argv[1]) as $file) { - echo $file . "\n"; -} - -?> \ No newline at end of file diff --git a/ext/spl/examples/directorytreeiterator.inc b/ext/spl/examples/directorytreeiterator.inc deleted file mode 100644 index 8454d9e305..0000000000 --- a/ext/spl/examples/directorytreeiterator.inc +++ /dev/null @@ -1,54 +0,0 @@ -getDepth(); $l++) { - $tree .= $this->getSubIterator($l)->hasNext() ? '| ' : ' '; - } - return $tree . ($this->getSubIterator($l)->hasNext() ? '|-' : '\-') - . $this->getSubIterator($l)->__toString(); - } - - /** Aggregates the inner iterator - */ - function __call($func, $params) - { - return call_user_func_array(array($this->getSubIterator(), $func), $params); - } -} - -?> \ No newline at end of file diff --git a/ext/spl/examples/findfile.inc b/ext/spl/examples/findfile.inc deleted file mode 100644 index 02ab792433..0000000000 --- a/ext/spl/examples/findfile.inc +++ /dev/null @@ -1,65 +0,0 @@ -file = $file; - $list = split(PATH_SEPARATOR, $path); - if (count($list) <= 1) { - parent::__construct(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path))); - } else { - $it = new AppendIterator(); - foreach($list as $path) { - $it->append(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path))); - } - parent::__construct($it); - } - } - - /** @return whether the current file matches the given filename - */ - function accept() - { - return !strcmp($this->current(), $this->file); - } - - /** @return the filename to search for. - * @note This may be overloaded and contain a regular expression for an - * extended class that uses regular expressions to search. - */ - function getSearch() - { - return $this->file; - } -} - -?> \ No newline at end of file diff --git a/ext/spl/examples/findfile.php b/ext/spl/examples/findfile.php deleted file mode 100755 index 60146cbffd..0000000000 --- a/ext/spl/examples/findfile.php +++ /dev/null @@ -1,33 +0,0 @@ - \ - * - * \ Path to search in. You can specify multiple paths by separating - * them with ';'. - * \ Filename to look for. - */ - -if ($argc < 3) { - echo << - -Find a specific file by name. - - Path to search in. - Filename to look for. - - -EOF; - exit(1); -} - -if (!class_exists("FindFile", false)) require_once("findfile.inc"); - -foreach(new FindFile($argv[1], $argv[2]) as $file) echo $file->getPathname()."\n"; -?> \ No newline at end of file diff --git a/ext/spl/examples/findregex.php b/ext/spl/examples/findregex.php deleted file mode 100755 index b43ee0cbbc..0000000000 --- a/ext/spl/examples/findregex.php +++ /dev/null @@ -1,36 +0,0 @@ - \ - * - * \ Path to search in. - * \ Filename to look for. - */ - -if ($argc < 3) { - echo << - -Find a specific file by name. - - Path to search in. - Regex for filenames to look for. - - -EOF; - exit(1); -} - -if (!class_exists("RegexFindFile", false)) require_once("regexfindfile.inc"); - -foreach(new RegexFindFile($argv[1], $argv[2]) as $file) -{ - echo $file->getPathname()."\n"; -} - -?> \ No newline at end of file diff --git a/ext/spl/examples/ini_groups.php b/ext/spl/examples/ini_groups.php deleted file mode 100755 index 5136911096..0000000000 --- a/ext/spl/examples/ini_groups.php +++ /dev/null @@ -1,41 +0,0 @@ - [\] - * - * Show all groups in the ini file specified by \. - * The regular expression \ is used to filter the result. - * - * Note: configure with --enable-dba - */ - -if ($argc < 2) { - echo << [] - -Show all groups in the ini file specified by . -The regular expression is used to filter the result. - - -EOF; - exit(1); -} - -if (!class_exists("KeyFilter", false)) require_once("keyfilter.inc"); -if (!class_exists("IniGroups", false)) require_once("inigroups.inc"); - -$it = new IniGroups($argv[1]); -if ($argc>2) { - $it = new KeyFilter($it, $argv[2]); -} - -foreach($it as $group) { - echo "$group\n"; -} - -?> \ No newline at end of file diff --git a/ext/spl/examples/inigroups.inc b/ext/spl/examples/inigroups.inc deleted file mode 100644 index cb2bb04a57..0000000000 --- a/ext/spl/examples/inigroups.inc +++ /dev/null @@ -1,54 +0,0 @@ - \ No newline at end of file diff --git a/ext/spl/examples/keyfilter.inc b/ext/spl/examples/keyfilter.inc deleted file mode 100644 index abc925ec43..0000000000 --- a/ext/spl/examples/keyfilter.inc +++ /dev/null @@ -1,64 +0,0 @@ -regex = $regex; - } - - /** \return whether the current key mathes the regular expression - */ - function accept() - { - return ereg($this->regex, $this->getInnerIterator()->key()); - } - - /** @return regular expression used as filter - */ - function getRegex() - { - return $this->regex; - } - - /** - * hidden __clone - */ - protected function __clone() - { - // disallow clone - } -} - -?> \ No newline at end of file diff --git a/ext/spl/examples/nocvsdir.php b/ext/spl/examples/nocvsdir.php deleted file mode 100755 index 6993268945..0000000000 --- a/ext/spl/examples/nocvsdir.php +++ /dev/null @@ -1,55 +0,0 @@ - - * - * Simply specify the path to tree with parameter \. - */ - -if ($argc < 2) { - echo << - -Show the directory and all it's contents without any CVS directory in . - - The directory for which to generate the directory. - - -EOF; - exit(1); -} - -if (!class_exists("RecursiveFilterIterator")) require_once("recursivefilteriterator.inc"); - -class NoCvsDirectory extends RecursiveFilterIterator -{ - function __construct($path) - { - parent::__construct(new RecursiveDirectoryIterator($path)); - } - - function accept() - { - return $this->getInnerIterator()->getFilename() != 'CVS'; - } - - function getChildren() - { - return new NoCvsDirectory($this->key()); - } -} - -$it = new RecursiveIteratorIterator(new NoCvsDirectory($argv[1])); - -foreach($it as $pathname => $file) -{ - echo $pathname."\n"; -} - -?> \ No newline at end of file diff --git a/ext/spl/examples/phar_from_dir.php b/ext/spl/examples/phar_from_dir.php deleted file mode 100755 index 2ee15ca1e6..0000000000 --- a/ext/spl/examples/phar_from_dir.php +++ /dev/null @@ -1,50 +0,0 @@ - \ [\] - * - * Create phar archive \ using entries from \ that - * optionally match \. - */ - -if ($argc < 3) -{ - echo << 3) -{ - $dir = new RegexIterator($dir, '/'.$argv[3].'/'); -} - -$phar->begin(); - -foreach($dir as $file) -{ - echo "$file\n"; - copy($file, "phar://newphar/$file"); -} - -$phar->commit(); - -?> \ No newline at end of file diff --git a/ext/spl/examples/regexfindfile.inc b/ext/spl/examples/regexfindfile.inc deleted file mode 100644 index d5dd722536..0000000000 --- a/ext/spl/examples/regexfindfile.inc +++ /dev/null @@ -1,40 +0,0 @@ -getSearch(), $this->current()); - } -} - -?> \ No newline at end of file diff --git a/ext/spl/examples/searchiterator.inc b/ext/spl/examples/searchiterator.inc deleted file mode 100644 index ff4963bc72..0000000000 --- a/ext/spl/examples/searchiterator.inc +++ /dev/null @@ -1,58 +0,0 @@ -done = false; - } - - /** @return whether the current element is valid - * which can only happen once per iteration. - */ - function valid() - { - return !$this->done && parent::valid(); - } - - /** Do not move forward but instead mark as finished. - * @return void - */ - function next() - { - $this->done = true; - } - - /** Aggregates the inner iterator - */ - function __call($func, $params) - { - return call_user_func_array(array($this->getInnerIterator(), $func), $params); - } -} - -?> \ No newline at end of file diff --git a/ext/spl/examples/tests/examples.inc b/ext/spl/examples/tests/examples.inc deleted file mode 100644 index feeba7db24..0000000000 --- a/ext/spl/examples/tests/examples.inc +++ /dev/null @@ -1,23 +0,0 @@ -append($path . '/' . strtolower($c) . '.inc'); - } - } -} - -$classes = array( -); - -foreach (new IncludeFiles(dirname(__FILE__). '/..', $classes) as $file) -{ - require_once($file); -} - -?> \ No newline at end of file diff --git a/ext/spl/examples/tree.php b/ext/spl/examples/tree.php deleted file mode 100755 index 9c2cc55866..0000000000 --- a/ext/spl/examples/tree.php +++ /dev/null @@ -1,40 +0,0 @@ - - * - * Simply specify the path to tree with parameter \. - */ - -// The following line only operates on classes which are converted to c already. -// But does not generate a graphical output. -//foreach(new RecursiveIteratorIterator(new ParentIterator(new RecursiveDirectoryIterator($argv[1])), 1) as $file) { - -if ($argc < 2) { - echo << - -Displays a graphical tree for the given . - - The directory for which to generate the tree graph. - - -EOF; - exit(1); -} - -if (!class_exists("DirectoryTreeIterator", false)) require_once("directorytreeiterator.inc"); -if (!class_exists("DirectoryGraphIterator", false)) require_once("directorygraphiterator.inc"); - -echo $argv[1]."\n"; -foreach(new DirectoryGraphIterator($argv[1]) as $file) -{ - echo $file . "\n"; -} - -?> diff --git a/ext/spl/examples/dualiterator.inc b/ext/spl/tests/dualiterator.inc similarity index 100% rename from ext/spl/examples/dualiterator.inc rename to ext/spl/tests/dualiterator.inc diff --git a/ext/spl/examples/tests/dualiterator_001.phpt b/ext/spl/tests/dualiterator_001.phpt similarity index 93% rename from ext/spl/examples/tests/dualiterator_001.phpt rename to ext/spl/tests/dualiterator_001.phpt index eb92347d51..dd75ca9463 100644 --- a/ext/spl/examples/tests/dualiterator_001.phpt +++ b/ext/spl/tests/dualiterator_001.phpt @@ -5,7 +5,7 @@ SPL: DualIterator function spl_examples_autoload($classname) { - include(dirname(__FILE__) . '/../' . strtolower($classname) . '.inc'); + include(dirname(__FILE__) . '/' . strtolower($classname) . '.inc'); } spl_autoload_register('spl_examples_autoload'); diff --git a/ext/spl/examples/recursivecomparedualiterator.inc b/ext/spl/tests/recursivecomparedualiterator.inc similarity index 100% rename from ext/spl/examples/recursivecomparedualiterator.inc rename to ext/spl/tests/recursivecomparedualiterator.inc diff --git a/ext/spl/examples/recursivedualiterator.inc b/ext/spl/tests/recursivedualiterator.inc similarity index 100% rename from ext/spl/examples/recursivedualiterator.inc rename to ext/spl/tests/recursivedualiterator.inc