diff options
author | Lorry Tar Creator <lorry-tar-importer@baserock.org> | 2013-03-14 05:42:27 +0000 |
---|---|---|
committer | <> | 2013-04-03 16:25:08 +0000 |
commit | c4dd7a1a684490673e25aaf4fabec5df138854c4 (patch) | |
tree | 4d57c44caae4480efff02b90b9be86f44bf25409 /ext/spl/spl.php | |
download | php2-master.tar.gz |
Imported from /home/lorry/working-area/delta_php2/php-5.4.13.tar.bz2.HEADphp-5.4.13master
Diffstat (limited to 'ext/spl/spl.php')
-rwxr-xr-x | ext/spl/spl.php | 1163 |
1 files changed, 1163 insertions, 0 deletions
diff --git a/ext/spl/spl.php b/ext/spl/spl.php new file mode 100755 index 0000000..fdffda3 --- /dev/null +++ b/ext/spl/spl.php @@ -0,0 +1,1163 @@ +<?php + +/** @file spl.php + * @ingroup SPL + * @brief Documentation of internal classes and interfaces + * + * SPL - Standard PHP Library + * + * (c) Marcus Boerger, 2003 - 2008 + */ + +/** @mainpage SPL - Standard PHP Library + * + * SPL - Standard PHP Library + * + * SPL is a collection of interfaces and classes that are meant to solve + * standard problems and implements some efficient data access interfaces + * and classes. You'll find the classes documented using php code in the + * file spl.php or in corresponding .inc files in subdirectories examples + * and internal. Based on the internal implementations or the files in the + * examples subdirectory there are also some .php files to experiment with. + * + * The .inc files are not included automatically because they are sooner or + * later integrated into the extension. That means that you either need to + * put the code of examples/autoload.inc into your autoprepend file or that + * you have to point your ini setting auto_prepend_file to that file. + * + * Below is a list of interfaces/classes already availabel natively through + * the SPL extension grouped by category. + * + * 1) Iterators + * + * SPL offers some advanced iterator algorithms: + * + * - interface RecursiveIterator extends Iterator + * - interface OuterIterator extends Iterator + * - class RecursiveIteratorIterator implements OuterIterator + * - class RecursiveTreeIterator extends RecursiveIteratorIterator + * - abstract class FilterIterator implements OuterIterator + * - class ParentIterator extends FilterIterator implements RecursiveIterator + * - interface SeekableIterator extends Iterator + * - class LimitIterator implements OuterIterator + * - class CachingIterator implements OuterIterator + * - class RecursiveCachingIterator extends CachingIterator implements RecursiveIterator + * - class IteratorIterator implements OuterIterator + * - class NoRewindIterator implements OuterIterator + * - class EmptyIterator implements Iterator + * - class InfiniteIterator extends IteratorIterator + * - class AppendIterator implements OuterIterator + * - class RegexIterator extends FilterIterator + * - class RecursiveRegexIterator extends RegexIterator implements RecursiveIterator + * - class MultipleIterator extends Iterator + * + * 2) Directories and Files + * + * SPL offers two advanced directory and file handling classes: + * + * - class SplFileInfo + * - class DirectoryIterator extends SplFileInfo implements Iterator + * - class FilesystemIterator extends DirectoryIterator + * - class RecursiveDirectoryIterator extends FilesystemIterator implements RecursiveIterator + * - class GlobIterator extends FilesystemIterator implements Countable + * - class SplFileObject extends SplFileInfo implements RecursiveIterator, SeekableIterator + * - class SplTempFileObject extends SplFileObject + * + * 3) XML + * + * SPL offers an advanced XML handling class: + * + * - class SimpleXMLIterator extends simplexml_element implements RecursiveIterator + * + * 4) Array Overloading + * + * SPL offers advanced Array overloading: + * + * - class ArrayObject implements IteratorAggregate, ArrayAccess, Countable + * - class ArrayIterator implements Iterator, ArrayAccess, Countable, SeekableIterator + * - class RecursiveArrayIterator extends ArrayIterator implements RecursiveIterator + * - class SplFixedArray implements Iterator, ArrayAccess, Countable + * + * As the above suggest an ArrayObject creates an ArrayIterator when it comes to + * iteration (e.g. ArrayObject instance used inside foreach). + * + * 5) Counting + * + * - interface Countable allows to hook into the standard array function count(). + * + * 6) Exception%s + * + * SPL provides a set of standard Exception classes each meant to indicate a + * certain problem type. + * + * - class LogicException extends Exception + * - class BadFunctionCallException extends LogicException + * - class BadMethodCallException extends BadFunctionCallException + * - class DomainException extends LogicException + * - class InvalidArgumentException extends LogicException + * - class LengthException extends LogicException + * - class OutOfRangeException extends LogicException + * - class RuntimeException extends Exception + * - class OutOfBoundsException extends RuntimeException + * - class OverflowException extends RuntimeException + * - class RangeException extends RuntimeException + * - class UnderflowException extends RuntimeException + * + * 7) Observer + * + * SPL suggests a standard way of implementing the observer pattern. + * + * - interface SplObserver + * - interface SplSubject + * - class SplObjectStorage + * + * 8) Datastructures + * + * SPL proposes a set of datastructures implemented internally. + * + * - class SplDoublyLinkedList + * - class SplStack extends SplDoublyLinkedList + * - class SplQueue extends SplDoublyLinkedList + * + * 9) @ref Examples + * + * The classes and interfaces in this group are contained as PHP code in the + * examples subdirectory of ext/SPL. Sooner or later they will be moved to + * c-code. + * + * 10) Some articles about SPL: + * - <a href="http://www.phpro.org/tutorials/Introduction-to-SPL.html">Introduction to Standard PHP Library (SPL)</a> + * - <a href="http://www.sitepoint.com/article/php5-standard-library/1">Introducing PHP 5's Standard Library</a> + * - <a href="http://www.ramikayyali.com/archives/2005/02/25/iterators">Iterators in PHP5</a> + * - <a href="http://www.phpriot.com/d/articles/php/oop/oop-with-spl-php-5-1/index.html">Advanced OOP with SPL in PHP 5</a> + * - <a href="http://www.devshed.com/c/a/PHP/The-Standard-PHP-Library-Part-1/">The Standard PHP Library, Part 1</a> + * - <a href="http://www.devshed.com/c/a/PHP/The-Standard-PHP-Library-Part-2/">The Standard PHP Library, Part 2</a> + * - <a href="http://www.professionelle-softwareentwicklung-mit-php5.de/erste_auflage/oop.iterators.spl.html">Die Standard PHP Library (SPL) [german]</a> + * + * 11) Talks on SPL: + * - SPL Update <a href="http://talks.somabo.de/200702_vancouver_spl_update.pps">[pps]</a>, <a href="http://talks.somabo.de/200702_vancouver_spl_update.pdf">[pdf]</a> + * - Happy SPLing <a href="http://talks.somabo.de/200509_toronto_happy_spling.pps">[pps]</a>, <a href="http://talks.somabo.de/200509_toronto_happy_spling.pdf">[pdf]</a> + * - From engine overloading to SPL <a href="http://talks.somabo.de/200505_cancun_from_engine_overloading_to_spl.pps">[pps]</a>, <a href="http://talks.somabo.de/200505_cancun_from_engine_overloading_to_spl.pdf">[pdf]</a> + * - SPL for the masses <a href="http://talks.somabo.de/200504_php_quebec_spl_for_the_masses.pps">[pps]</a>, <a href="http://talks.somabo.de/200504_php_quebec_spl_for_the_masses.pdf">[pdf]</a> + * + * 12) Debug sessions: + * - Debug session 1 <a href="200407_oscon_introduction_to_iterators_debug.pps">[pps]</a>, <a href="200407_oscon_introduction_to_iterators_debug.pdf">[pdf]</a> + * - Debug session 2 <a href="http://talks.somabo.de/200509_toronto_iterator_debug_session_1.pps">[pps]</a>, <a href="http://talks.somabo.de/200509_toronto_iterator_debug_session_1.pdf">[pdf]</a>, <a href="http://taks.somabo.de/200411_php_conference_frankfrurt_iterator_debug_session.swf">[swf]</a> + * - Debug session 3 <a href="http://talks.somabo.de/200509_toronto_iterator_debug_session_2.pps">[pps]</a>, <a href="http://talks.somabo.de/200509_toronto_iterator_debug_session_2.pdf">[pdf]</a> + * + * You can download this documentation as a chm file + * <a href="http://php.net/~helly/php/ext/spl/spl.chm">here</a>. + * + * (c) Marcus Boerger, 2003 - 2007 + */ + +/** @defgroup ZendEngine Zend engine classes + * + * The classes and interfaces in this group are contained in the c-code of + * PHP's Zend engine. + */ + +/** @defgroup SPL Internal classes + * + * The classes and interfaces in this group are contained in the c-code of + * ext/SPL. + */ + +/** @defgroup Examples Example classes + * + * The classes and interfaces in this group are contained as PHP code in the + * examples subdirectory of ext/SPL. Sooner or later they will be moved to + * c-code. + */ + +/** @ingroup SPL + * @brief Default implementation for __autoload() + * @since PHP 5.1 + * + * @param class_name name of class to load + * @param file_extensions file extensions (use defaults if NULL) + */ +function spl_autoload(string $class_name, string $file_extensions = NULL) {/**/}; + +/** @ingroup SPL + * @brief Manual invocation of all registerd autoload functions + * @since PHP 5.1 + * + * @param class_name name of class to load + */ +function spl_autoload_call(string $class_name) {/**/}; + +/** @ingroup SPL + * @brief Register and return default file extensions for spl_autoload + * @since PHP 5.1 + * + * @param file_extensions optional comma separated list of extensions to use in + * default autoload function. If not given just return the current list. + * @return comma separated list of file extensions to use in default autoload + * function. + */ +function spl_autoload_extensions($file_extensions) {/**/}; + +/** @ingroup SPL + * @brief Return all registered autoload functionns + * @since PHP 5.1 + * + * @return array of all registered autoload functions or false + */ +function spl_autoload_functions() {/**/}; + +/** @ingroup SPL + * @brief Register given function as autoload implementation + * @since PHP 5.1 + * + * @param autoload_function name of function or array of object/class and + * function name to register as autoload function. + * @param throw whether to throw or issue an error on failure. + */ +function spl_autoload_register(string $autoload_function = "spl_autoload", $throw = true) {/**/}; + +/** @ingroup SPL + * @brief Unregister given function as autoload implementation + * @since PHP 5.1 + * + * @param autoload_function name of function or array of object/class and + * function name to unregister as autoload function. + */ +function spl_autoload_unregister(string $autoload_function = "spl_autoload") {/**/}; + +/** @ingroup SPL + * @brief Return an array of classes and interfaces in SPL + * + * @return array containing the names of all clsses and interfaces defined in + * extension SPL + */ +function spl_classes() {/**/}; + +/** @ingroup SPL + * @brief Count the elements in an iterator + * @since PHP 5.1 + * + * @return number of elements in an iterator + */ +function iterator_count(Traversable $it) {/**/}; + +/** @ingroup SPL + * @brief Copy iterator elements into an array + * @since PHP 5.1 + * + * @param it iterator to copy + * @param use_keys whether touse the keys + * @return array with elements copied from the iterator + */ +function iterator_to_array(Traversable $it, $use_keys = true) {/**/}; + +/** @ingroup ZendEngine + * @brief Basic Exception class. + * @since PHP 5.0 + */ +class Exception +{ + /** The exception message */ + protected $message; + + /** The string represenations as generated during construction */ + private $string; + + /** The code passed to the constructor */ + protected $code; + + /** The file name where the exception was instantiated */ + protected $file; + + /** The line number where the exception was instantiated */ + protected $line; + + /** The stack trace */ + private $trace; + + /** Prevent clone + */ + final private function __clone() {} + + /** Construct an exception + * + * @param $message Some text describing the exception + * @param $code Some code describing the exception + */ + function __construct($message = NULL, $code = 0) { + if (func_num_args()) { + $this->message = $message; + } + $this->code = $code; + $this->file = __FILE__; // of throw clause + $this->line = __LINE__; // of throw clause + $this->trace = debug_backtrace(); + $this->string = StringFormat($this); + } + + /** @return the message passed to the constructor + */ + final public function getMessage() + { + return $this->message; + } + + /** @return the code passed to the constructor + */ + final public function getCode() + { + return $this->code; + } + + /** @return the name of the file where the exception was thrown + */ + final public function getFile() + { + return $this->file; + } + + /** @return the line number where the exception was thrown + */ + final public function getLine() + { + return $this->line; + } + + /** @return the stack trace as array + */ + final public function getTrace() + { + return $this->trace; + } + + /** @return the stack trace as string + */ + final public function getTraceAsString() + { + } + + /** @return string represenation of exception + */ + public function __toString() + { + return $this->string; + } +} + +/** @ingroup SPL + * @brief Exception that represents error in the program logic. + * @since PHP 5.1 + * + * This kind of exceptions should directly leed to a fix in your code. + */ +class LogicException extends Exception +{ +} + +/** @ingroup SPL + * @brief Exception thrown when a function call was illegal. + * @since PHP 5.1 + */ +class BadFunctionCallException extends LogicException +{ +} + +/** @ingroup SPL + * @brief Exception thrown when a method call was illegal. + * @since PHP 5.1 + */ +class BadMethodCallException extends BadFunctionCallException +{ +} + +/** @ingroup SPL + * @brief Exception that denotes a value not in the valid domain was used. + * @since PHP 5.1 + * + * This kind of exception should be used to inform about domain erors in + * mathematical sense. + * + * @see RangeException + */ +class DomainException extends LogicException +{ +} + +/** @ingroup SPL + * @brief Exception that denotes invalid arguments were passed. + * @since PHP 5.1 + * + * @see UnexpectedValueException + */ +class InvalidArgumentException extends LogicException +{ +} + +/** @ingroup SPL + * @brief Exception thrown when a parameter exceeds the allowed length. + * @since PHP 5.1 + * + * This can be used for strings length, array size, file size, number of + * elements read from an Iterator and so on. + */ +class LengthException extends LogicException +{ +} + +/** @ingroup SPL + * @brief Exception thrown when an illegal index was requested. + * @since PHP 5.1 + * + * This represents errors that should be detected at compile time. + * + * @see OutOfBoundsException + */ +class OutOfRangeException extends LogicException +{ +} + +/** @ingroup SPL + * @brief Exception thrown for errors that are only detectable at runtime. + * @since PHP 5.1 + */ +class RuntimeException extends Exception +{ +} + +/** @ingroup SPL + * @brief Exception thrown when an illegal index was requested. + * @since PHP 5.1 + * + * This represents errors that cannot be detected at compile time. + * + * @see OutOfRangeException + */ +class OutOfBoundsException extends RuntimeException +{ +} + +/** @ingroup SPL + * @brief Exception thrown to indicate arithmetic/buffer overflow. + * @since PHP 5.1 + */ +class OverflowException extends RuntimeException +{ +} + +/** @ingroup SPL + * @brief Exception thrown to indicate range errors during program execution. + * @since PHP 5.1 + * + * Normally this means there was an arithmetic error other than under/overflow. + * This is the runtime version of DomainException. + * + * @see DomainException + */ +class RangeException extends RuntimeException +{ +} + +/** @ingroup SPL + * @brief Exception thrown to indicate arithmetic/buffer underflow. + * @since PHP 5.1 + */ +class UnderflowException extends RuntimeException +{ +} + +/** @ingroup SPL + * @brief Exception thrown to indicate an unexpected value. + * @since PHP 5.1 + * + * Typically this happens when a function calls another function and espects + * the return value to be of a certain type or value not including arithmetic + * or buffer related errors. + * + * @see InvalidArgumentException + */ +class UnexpectedValueException extends RuntimeException +{ +} + +/** @ingroup ZendEngine + * @brief Interface to override array access of objects. + * @since PHP 5.0 + */ +interface ArrayAccess +{ + /** @param $offset to modify + * @param $value new value + */ + function offsetSet($offset, $value); + + /** @param $offset to retrieve + * @return value at given offset + */ + function offsetGet($offset); + + /** @param $offset to delete + */ + function offsetUnset($offset); + + /** @param $offset to check + * @return whether the offset exists. + */ + function offsetExists($offset); +} + +/** @ingroup ZendEngine + * @brief Interface to detect a class is traversable using foreach. + * @since PHP 5.0 + * + * Abstract base interface that cannot be implemented alone. Instead it + * must be implemented by either IteratorAggregate or Iterator. + * + * @note Internal classes that implement this interface can be used in a + * foreach construct and do not need to implement IteratorAggregate or + * Iterator. + * + * @note This is an engine internal interface which cannot be implemented + * in PHP scripts. Either IteratorAggregate or Iterator must be used + * instead. + */ +interface Traversable +{ +} + +/** @ingroup ZendEngine + * @brief Interface to create an external Iterator. + * @since PHP 5.0 + * + * @note This is an engine internal interface. + */ +interface IteratorAggregate extends Traversable +{ + /** @return an Iterator for the implementing object. + */ + function getIterator(); +} + +/** @ingroup ZendEngine + * @brief Basic iterator + * @since PHP 5.0 + * + * Interface for external iterators or objects that can be iterated + * themselves internally. + * + * @note This is an engine internal interface. + */ +interface Iterator extends Traversable +{ + /** Rewind the Iterator to the first element. + */ + function rewind(); + + /** Return the current element. + */ + function current(); + + /** Return the key of the current element. + */ + function key(); + + /** Move forward to next element. + */ + function next(); + + /** Check if there is a current element after calls to rewind() or next(). + */ + function valid(); +} + +/** @ingroup SPL + * @brief This Interface allows to hook into the global count() function. + * @since PHP 5.1 + */ +interface Countable +{ + /** @return the number the global function count() should show + */ + function count(); +} + +/** @ingroup ZendEngine + * @brief Interface for customized serializing + * @since 5.1 + * + * Classes that implement this interface no longer support __sleep() and + * __wakeup(). The method serialized is called whenever an instance needs to + * be serialized. This does not invoke __destruct() or has any other side + * effect unless programmed inside the method. When the data is unserialized + * the class is known and the appropriate unserialize() method is called as a + * constructor instead of calling __construct(). If you need to execute the + * standard constructor you may do so in the method. + */ +interface Serializable +{ + /** + * @return string representation of the instance + */ + function serialize(); + + /** + * @note This is a constructor + * + * @param $serialized data read from stream to construct the instance + */ + function unserialize($serialized); +} + +/** @ingroup SPL + * @brief An Array wrapper + * @since PHP 5.0 + * @version 1.2 + * + * This array wrapper allows to recursively iterate over Arrays and public + * Object properties. + * + * @see ArrayIterator + */ +class ArrayObject implements IteratorAggregate, ArrayAccess, Countable +{ + /** Properties of the object have their normal functionality + * when accessed as list (var_dump, foreach, etc.) */ + const STD_PROP_LIST = 0x00000001; + /** Array indices can be accessed as properties in read/write */ + const ARRAY_AS_PROPS = 0x00000002; + + /** Construct a new array iterator from anything that has a hash table. + * That is any Array or Object. + * + * @param $array the array to use. + * @param $flags see setFlags(). + * @param $iterator_class class used in getIterator() + */ + function __construct($array, $flags = 0, $iterator_class = "ArrayIterator") {/**/} + + /** Set behavior flags. + * + * @param $flags bitmask as follows: + * 0 set: properties of the object have their normal functionality + * when accessed as list (var_dump, foreach, etc.) + * 1 set: array indices can be accessed as properties in read/write + */ + function setFlags($flags) {/**/} + + /** @return current flags + */ + function getFlags() {/**/} + + /** Sort the entries by values. + */ + function asort() {/**/} + + /** Sort the entries by key. + */ + function ksort() {/**/} + + /** Sort the entries by values using user defined function. + */ + function uasort(mixed cmp_function) {/**/} + + /** Sort the entries by key using user defined function. + */ + function uksort(mixed cmp_function) {/**/} + + /** Sort the entries by values using "natural order" algorithm. + */ + function natsort() {/**/} + + /** Sort the entries by values using case insensitive "natural order" algorithm. + */ + function natcasesort() {/**/} + + /** @param $array new array or object + */ + function exchangeArray($array) {/**/} + + /** @return the iterator which is an ArrayIterator object connected to + * this object. + */ + function getIterator() {/**/} + + /** @param $index offset to inspect + * @return whetehr offset $index esists + */ + function offsetExists($index) {/**/} + + /** @param $index offset to return value for + * @return value at offset $index + */ + function offsetGet($index) {/**/} + + /** @param $index index to set + * @param $newval new value to store at offset $index + */ + function offsetSet($index, $newval) {/**/} + + /** @param $index offset to unset + */ + function offsetUnset($index) {/**/} + + /** @param $value is appended as last element + * @warning this method cannot be called when the ArrayObject refers to + * an object. + */ + function append($value) {/**/} + + /** @return a \b copy of the array + * @note when the ArrayObject refers to an object then this method + * returns an array of the public properties. + */ + function getArrayCopy() {/**/} + + /** @return the number of elements in the array or the number of public + * properties in the object. + */ + function count() {/**/} + + /* @param $iterator_class new class used in getIterator() + */ + function setIteratorClass($itertor_class) {/**/} + + /* @return class used in getIterator() + */ + function getIteratorClass() {/**/} +} + +/** @ingroup SPL + * @brief An Array iterator + * @since PHP 5.0 + * @version 1.2 + * + * This iterator allows to unset and modify values and keys while iterating + * over Arrays and Objects. + * + * When you want to iterate over the same array multiple times you need to + * instanciate ArrayObject and let it create ArrayIterator instances that + * refer to it either by using foreach or by calling its getIterator() + * method manually. + */ +class ArrayIterator implements SeekableIterator, ArrayAccess, Countable +{ + /** Properties of the object have their normal functionality + * when accessed as list (var_dump, foreach, etc.) */ + const STD_PROP_LIST = 0x00000001; + /** Array indices can be accessed as properties in read/write */ + const ARRAY_AS_PROPS = 0x00000002; + + /** Construct a new array iterator from anything that has a hash table. + * That is any Array or Object. + * + * @param $array the array to use. + * @param $flags see setFlags(). + */ + function __construct($array, $flags = 0) {/**/} + + /** Set behavior flags. + * + * @param $flags bitmask as follows: + * 0 set: properties of the object have their normal functionality + * when accessed as list (var_dump, foreach, etc.) + * 1 set: array indices can be accessed as properties in read/write + */ + function setFlags($flags) {/**/} + + /** + * @return current flags + */ + function getFlags() {/**/} + + /** Sort the entries by values. + */ + function asort() {/**/} + + /** Sort the entries by key. + */ + function ksort() {/**/} + + /** Sort the entries by values using user defined function. + */ + function uasort(mixed cmp_function) {/**/} + + /** Sort the entries by key using user defined function. + */ + function uksort(mixed cmp_function) {/**/} + + /** Sort the entries by values using "natural order" algorithm. + */ + function natsort() {/**/} + + /** Sort the entries by values using case insensitive "natural order" algorithm. + */ + function natcasesort() {/**/} + + /** @param $index offset to inspect + * @return whetehr offset $index esists + */ + function offsetExists($index) {/**/} + + /** @param $index offset to return value for + * @return value at offset $index + */ + function offsetGet($index) {/**/} + + /** @param $index index to set + * @param $newval new value to store at offset $index + */ + function offsetSet($index, $newval) {/**/} + + /** @param $index offset to unset + */ + function offsetUnset($index) {/**/} + + /** @param $value is appended as last element + * @warning this method cannot be called when the ArrayIterator refers to + * an object. + */ + function append($value) {/**/} + + /** @return a \b copy of the array + * @note when the ArrayIterator refers to an object then this method + * returns an array of the public properties. + */ + function getArrayCopy() {/**/} + + /** @param $position offset to seek to + * @throw OutOfBoundsException if $position is invalid + */ + function seek($position) {/**/} + + /** @return the number of elements in the array or the number of public + * properties in the object. + */ + function count() {/**/} + + /** @copydoc Iterator::rewind */ + function rewind() {/**/} + + /** @copydoc Iterator::valid */ + function valid() {/**/} + + /** @copydoc Iterator::current */ + function current() {/**/} + + /** @copydoc Iterator::key */ + function key() {/**/} + + /** @copydoc Iterator::next */ + function next() {/**/} +} + +/** @ingroup SPL + * @brief File info class + * @since PHP 5.1.3 + */ +class SplFileInfo +{ + /** Construct a file info object + * + * @param $file_name path or file name + */ + function __construct($file_name) {/**/} + + /** @return the path part only. + */ + function getPath() {/**/} + + /** @return the filename only. + */ + function getFilename() {/**/} + + /** @return SplFileInfo created for the file + * @param class_name name of class to instantiate + * @see SplFileInfo::setInfoClass() + */ + function getFileInfo(string class_name = NULL) {/**/} + + /** @return The current entries path and file name. + */ + function getPathname() {/**/} + + /** @return SplFileInfo created for the path + * @param class_name name of class to instantiate + * @see SplFileInfo::setInfoClass() + */ + function getPathInfo(string class_name = NULL) {/**/} + + /** @return The current entry's permissions. + */ + function getPerms() {/**/} + + /** @return The current entry's inode. + */ + function getInode() {/**/} + + /** @return The current entry's size in bytes . + */ + function getSize() {/**/} + + /** @return The current entry's owner name. + */ + function getOwner() {/**/} + + /** @return The current entry's group name. + */ + function getGroup() {/**/} + + /** @return The current entry's last access time. + */ + function getATime() {/**/} + + /** @return The current entry's last modification time. + */ + function getMTime() {/**/} + + /** @return The current entry's last change time. + */ + function getCTime() {/**/} + + /** @return The current entry's file type. + */ + function getType() {/**/} + + /** @return Whether the current entry is writeable. + */ + function isWritable() {/**/} + + /** @return Whether the current entry is readable. + */ + function isReadable() {/**/} + + /** @return Whether the current entry is executable. + */ + function isExecutable() {/**/} + + /** @return Whether the current entry is . + */ + function isFile() {/**/} + + /** @return Whether the current entry is a directory. + */ + function isDir() {/**/} + + /** @return whether the current entry is a link. + */ + function isLink() {/**/} + + /** @return target of link. + */ + function getLinkTarget() {/**/} + + /** @return The resolved path + */ + function getRealPath() {/**/} + + /** @return getPathname() + */ + function __toString() {/**/} + + /** Open the current file as a SplFileObject instance + * + * @param mode open mode + * @param use_include_path whether to search include paths (don't use) + * @param context resource context to pased to open function + * @throw RuntimeException if file cannot be opened (e.g. insufficient + * access rights). + * @return The opened file as a SplFileObject instance + * + * @see SplFileObject + * @see SplFileInfo::setFileClass() + * @see file() + */ + function openFile($mode = 'r', $use_include_path = false, $context = NULL) {/**/} + + /** @param class_name name of class used with openFile(). Must be derived + * from SPLFileObject. + */ + function setFileClass(string class_name = "SplFileObject") {/**/} + + /** @param class_name name of class used with getFileInfo(), getPathInfo(). + * Must be derived from SplFileInfo. + */ + function setInfoClass(string class_name = "SplFileInfo") {/**/} +} + +/** @ingroup SPL + * @brief Directory iterator + * @version 1.1 + * @since PHP 5.0 + */ +class DirectoryIterator extends SplFileInfo implements Iterator +{ + /** Construct a directory iterator from a path-string. + * + * @param $path directory to iterate. + */ + function __construct($path) {/**/} + + /** @copydoc Iterator::rewind */ + function rewind() {/**/} + + /** @copydoc Iterator::valid */ + function valid() {/**/} + + /** @return index of entry + */ + function key() {/**/} + + /** @return $this + */ + function current() {/**/} + + /** @copydoc Iterator::next */ + function next() {/**/} + + /** @return Whether the current entry is either '.' or '..'. + */ + function isDot() {/**/} + + /** @return whether the current entry is a link. + */ + function isLink() {/**/} + + /** @return getFilename() + */ + function __toString() {/**/} +} + +/** @ingroup SPL + * @brief recursive directory iterator + * @version 1.1 + * @since PHP 5.0 + */ +class RecursiveDirectoryIterator extends DirectoryIterator implements RecursiveIterator +{ + const CURRENT_AS_FILEINFO 0x00000000; /* make RecursiveDirectoryTree::current() return SplFileInfo */ + const CURRENT_AS_SELF 0x00000010; /* make RecursiveDirectoryTree::current() return getSelf() */ + const CURRENT_AS_PATHNAME 0x00000020; /* make RecursiveDirectoryTree::current() return getPathname() */ + + const KEY_AS_PATHNAME 0x00000000; /* make RecursiveDirectoryTree::key() return getPathname() */ + const KEY_AS_FILENAME 0x00000100; /* make RecursiveDirectoryTree::key() return getFilename() */ + + const NEW_CURRENT_AND_KEY 0x00000100; /* CURRENT_AS_FILEINFO + KEY_AS_FILENAME */ + + /** Construct a directory iterator from a path-string. + * + * @param $path directory to iterate. + * @param $flags open flags + * - CURRENT_AS_FILEINFO + * - CURRENT_AS_SELF + * - CURRENT_AS_PATHNAME + * - KEY_AS_PATHNAME + * - KEY_AS_FILENAME + * - NEW_CURRENT_AND_KEY + */ + function __construct($path, $flags = 0) {/**/} + + /** @return getPathname() or getFilename() depending on flags + */ + function key() {/**/} + + /** @return getFilename() or getFileInfo() depending on flags + */ + function current() {/**/} + + /** @return whether the current is a directory (not '.' or '..'). + */ + function hasChildren() {/**/} + + /** @return a RecursiveDirectoryIterator for the current entry. + */ + function getChildren() {/**/} + + /** @return sub path only (without main path) + */ + function getSubPath() {/**/} + + /** @return the current sub path + */ + function getSubPathname() {/**/} +} + +/** @ingroup SPL + * @brief recursive SimpleXML_Element iterator + * @since PHP 5.0 + * + * The SimpleXMLIterator implements the RecursiveIterator interface. This + * allows iteration over all elements using foreach or an appropriate while + * construct, just like SimpleXMLElement does. When using the foreach construct, + * you will also iterate over the subelements. For every element which + * has subelements, hasChildren() returns true. This will trigger a call to + * getChildren() which returns the iterator for that sub element. + */ +class SimpleXMLIterator extends SimpleXMLElement implements RecursiveIterator, Countable +{ + /** @return whether the current node has sub nodes. + */ + function hasChildren() {/**/} + + /** @return a SimpleXMLIterator for the current node. + */ + function getChildren() {/**/} + + /** @return number of elements/attributes seen with foreach() + */ + function count() {/**/} + + /** @copydoc Iterator::rewind */ + function rewind() {/**/} + + /** @copydoc Iterator::valid */ + function valid() {/**/} + + /** @copydoc Iterator::current */ + function current() {/**/} + + /** @copydoc Iterator::key */ + function key() {/**/} + + /** @copydoc Iterator::next */ + function next() {/**/} +} + +/** @ingroup SPL + * @brief Observer of the observer pattern + * @since PHP 5.1 + * + * For a detailed explanation see Observer pattern in + * <em> + * Gamma, Helm, Johnson, Vlissides<br /> + * Design Patterns + * </em> + */ +interface SplObserver +{ + /** Called from the subject (i.e. when it's value has changed). + * @param $subject the callee + */ + function update(SplSubject $subject); +} + +/** @ingroup SPL + * @brief Subject to the observer pattern + * @since PHP 5.1 + * @see Observer + */ +interface SplSubject +{ + /** @param $observer new observer to attach + */ + function attach(SplObserver $observer); + + /** @param $observer existing observer to detach + * @note a non attached observer shouldn't result in a warning or similar + */ + function detach(SplObserver $observer); + + /** Notify all observers + */ + function notify(); +} + +?> |