903a2444bc
Our PHP code can be simplified by using a common interface instead of relying on instanceof for proper dispatch.
5591 linhas
167 KiB
PHP
5591 linhas
167 KiB
PHP
<?php
|
|
// @generated
|
|
|
|
|
|
// default base
|
|
class stdClass {
|
|
}
|
|
|
|
// used in unserialize() for unknown classes
|
|
class __PHP_Incomplete_Class {
|
|
public $__PHP_Incomplete_Class_Name;
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/class.exception.php )
|
|
*
|
|
* Exception is the base class for all Exceptions.
|
|
*
|
|
*/
|
|
class Exception {
|
|
protected $message = ''; // exception message
|
|
protected $code = 0; // user defined exception code
|
|
protected $previous = null;
|
|
protected $file; // source filename of exception
|
|
protected $line; // source line of exception
|
|
protected $trace; // full stacktrace
|
|
private $inited = false;
|
|
|
|
private static $traceOpts = false;
|
|
|
|
/**
|
|
* This cannot be implemented in __construct, because a derived class may
|
|
* implement its own __construct, losing the stacktrace. The runtime has
|
|
* special logic to call the __init__ method on instances of Exception before
|
|
* calling __construct just to make sure $this->trace is always populated.
|
|
*/
|
|
final function __init__() {
|
|
if ($this->inited) {
|
|
return;
|
|
}
|
|
$this->initTrace();
|
|
$this->inited = true;
|
|
}
|
|
|
|
function __construct($message = '', $code = 0, Exception $previous = null) {
|
|
$this->message = $message;
|
|
$this->code = $code;
|
|
$this->previous = $previous;
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/exception.getmessage.php )
|
|
*
|
|
* Returns the Exception message.
|
|
*
|
|
* @return mixed Returns the Exception message as a string.
|
|
*/
|
|
function getMessage() {
|
|
return $this->message;
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/exception.getprevious.php )
|
|
*
|
|
* Returns the previous Exception.
|
|
*
|
|
* @return mixed Returns the previous Exception if available or NULL otherwise.
|
|
*/
|
|
final function getPrevious() {
|
|
return $this->previous;
|
|
}
|
|
|
|
final function setPrevious(Exception $previous) {
|
|
$this->previous = $previous;
|
|
}
|
|
|
|
final function setPreviousChain(Exception $previous) {
|
|
$cur = $this;
|
|
$next = $cur->getPrevious();
|
|
while ($next instanceof Exception) {
|
|
$cur = $next;
|
|
$next = $cur->getPrevious;
|
|
}
|
|
$cur->setPrevious($previous);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/exception.getcode.php )
|
|
*
|
|
* Returns the Exception code.
|
|
*
|
|
* @return mixed Returns the Exception code as a integer.
|
|
*/
|
|
function getCode() {
|
|
return $this->code;
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/exception.getfile.php )
|
|
*
|
|
* Get the name of the file the exception was thrown from.
|
|
*
|
|
* @return mixed Returns the filename in which the exception was
|
|
* thrown.
|
|
*/
|
|
final function getFile() {
|
|
return $this->file;
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/exception.getline.php )
|
|
*
|
|
* Returns line number where the exception was thrown.
|
|
*
|
|
* @return mixed Returns the line number where the exception was
|
|
* thrown.
|
|
*/
|
|
final function getLine() {
|
|
return $this->line;
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/exception.gettrace.php )
|
|
*
|
|
* Returns the Exception stack trace.
|
|
*
|
|
* @return mixed Returns the Exception stack trace as an array.
|
|
*/
|
|
final function getTrace() {
|
|
return $this->trace;
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/exception.gettraceasstring.php )
|
|
*
|
|
* Returns the Exception stack trace as a string.
|
|
*
|
|
* @return mixed Returns the Exception stack trace as a string.
|
|
*/
|
|
final function getTraceAsString() {
|
|
// works with the new FrameInjection-based stacktrace.
|
|
$i = 0;
|
|
$s = "";
|
|
foreach ($this->getTrace() as $frame) {
|
|
if (!is_array($frame)) continue;
|
|
$s .= "#$i " .
|
|
(isset($frame['file']) ? $frame['file'] : "") . "(" .
|
|
(isset($frame['line']) ? $frame['line'] : "") . "): " .
|
|
(isset($frame['class']) ? $frame['class'] . $frame['type'] : "") .
|
|
$frame['function'] . "()\n";
|
|
$i++;
|
|
}
|
|
$s .= "#$i {main}";
|
|
return $s;
|
|
}
|
|
|
|
/* Overrideable */
|
|
// formated string for display
|
|
function __toString() {
|
|
return "exception '" . get_class($this) . "' with message '" .
|
|
$this->getMessage() . "' in " . $this->getFile() . ":" .
|
|
$this->getLine() . "\nStack trace:\n" . $this->getTraceAsString();
|
|
}
|
|
|
|
/**
|
|
* Derived classes may override the methods below if different behavior
|
|
* for initializing the trace is desired
|
|
*/
|
|
protected function initTrace() {
|
|
$this->trace = debug_backtrace(static::getTraceOptions());
|
|
// Remove top stack frames up to and including Exception::__init__,
|
|
// set the 'file' and 'line' properties appropriately
|
|
while (!empty($this->trace)) {
|
|
$top = array_shift($this->trace);
|
|
if (isset($top['class']) && isset($top['function']) &&
|
|
strcasecmp($top['class'], 'exception') === 0 &&
|
|
strcasecmp($top['function'], '__init__') === 0) {
|
|
if (isset($top['file'])) $this->file = $top['file'];
|
|
if (isset($top['line'])) $this->line = $top['line'];
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
public static function getTraceOptions() {
|
|
return self::$traceOpts;
|
|
}
|
|
|
|
public static function setTraceOptions($opts) {
|
|
self::$traceOpts = $opts;
|
|
}
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/class.logicexception.php )
|
|
*
|
|
* Exception thrown if a logic expression is invalid
|
|
*
|
|
*/
|
|
class LogicException extends Exception {}
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from
|
|
* http://php.net/manual/en/class.badfunctioncallexception.php )
|
|
*
|
|
* Exception thrown if a callback refers to an undefined function or if
|
|
* some arguments are missing
|
|
*
|
|
*/
|
|
class BadFunctionCallException extends LogicException {}
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/class.badmethodcallexception.php
|
|
* )
|
|
*
|
|
* Exception thrown if a callback refers to an undefined method or if some
|
|
* arguments are missing
|
|
*
|
|
*/
|
|
class BadMethodCallException extends BadFunctionCallException {}
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/class.domainexception.php )
|
|
*
|
|
* Exception thrown if a value does not adhere to a defined valid data
|
|
* domain
|
|
*
|
|
*/
|
|
class DomainException extends LogicException {}
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from
|
|
* http://php.net/manual/en/class.invalidargumentexception.php )
|
|
*
|
|
* Exception thrown if an argument does not match with the expected value
|
|
*
|
|
*/
|
|
class InvalidArgumentException extends LogicException {}
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/class.lengthexception.php )
|
|
*
|
|
* Exception thrown if a length is invalid
|
|
*
|
|
*/
|
|
class LengthException extends LogicException {}
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/class.outofrangeexception.php )
|
|
*
|
|
* Exception thrown when a value does not match with a range
|
|
*
|
|
*/
|
|
class OutOfRangeException extends LogicException {}
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/class.runtimeexception.php )
|
|
*
|
|
* Exception thrown if an error which can only be found on runtime occurs
|
|
*
|
|
*/
|
|
class RuntimeException extends Exception {}
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/class.outofboundsexception.php )
|
|
*
|
|
* Exception thrown if a value is not a valid key
|
|
*
|
|
*/
|
|
class OutOfBoundsException extends RuntimeException {}
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/class.overflowexception.php )
|
|
*
|
|
* Exception thrown when you add an element into a full container
|
|
*
|
|
*/
|
|
class OverflowException extends RuntimeException {}
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/class.rangeexception.php )
|
|
*
|
|
* Exception thrown when an invalid range is given.
|
|
*
|
|
*/
|
|
class RangeException extends RuntimeException {}
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/class.underflowexception.php )
|
|
*
|
|
* Exception thrown when you try to remove an element of an empty
|
|
* container
|
|
*
|
|
*/
|
|
class UnderflowException extends RuntimeException {}
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from
|
|
* http://php.net/manual/en/class.unexpectedvalueexception.php )
|
|
*
|
|
* Exception thrown if a value does not match with a set of values
|
|
*
|
|
*/
|
|
class UnexpectedValueException extends RuntimeException {}
|
|
|
|
class InvalidOperationException extends RuntimeException {}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/class.errorexception.php )
|
|
*
|
|
* An Error Exception.
|
|
*
|
|
*/
|
|
class ErrorException extends Exception {
|
|
protected $severity;
|
|
public function __construct($message = "", $code = 0, $severity = 0,
|
|
$filename = null, $lineno = null) {
|
|
parent::__construct($message, $code);
|
|
$this->severity = $severity;
|
|
if ($filename !== null) {
|
|
$this->file = $filename;
|
|
}
|
|
if ($lineno !== null) {
|
|
$this->line = $lineno;
|
|
}
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/errorexception.getseverity.php )
|
|
*
|
|
* Returns the severity of the exception.
|
|
*
|
|
* @return mixed Returns the severity level of the exception.
|
|
*/
|
|
final public function getSeverity() { return $this->severity; }
|
|
}
|
|
|
|
class DOMException extends Exception {
|
|
public function __construct($message, $code) {
|
|
parent::__construct($message, $code);
|
|
}
|
|
}
|
|
|
|
class PDOException extends Exception {
|
|
public function __construct() {
|
|
}
|
|
}
|
|
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/class.arrayaccess.php )
|
|
*
|
|
* Interface to provide accessing objects as arrays.
|
|
*
|
|
*/
|
|
interface ArrayAccess {
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/arrayaccess.offsetexists.php )
|
|
*
|
|
* Whether or not an offset exists.
|
|
*
|
|
* This method is executed when using isset() or empty() on objects
|
|
* implementing ArrayAccess.
|
|
*
|
|
* When using empty() ArrayAccess::offsetGet() will be called and checked
|
|
* if empty only if ArrayAccess::offsetExists() returns TRUE.
|
|
*
|
|
* @index mixed An offset to check for.
|
|
*
|
|
* @return mixed Returns TRUE on success or FALSE on failure.
|
|
*
|
|
* The return value will be casted to boolean if
|
|
* non-boolean was returned.
|
|
*/
|
|
public function offsetExists($index);
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/arrayaccess.offsetget.php )
|
|
*
|
|
* Returns the value at specified offset.
|
|
*
|
|
* This method is executed when checking if offset is empty().
|
|
*
|
|
* @index mixed The offset to retrieve.
|
|
*
|
|
* @return mixed Can return all value types.
|
|
*/
|
|
public function offsetGet($index);
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/arrayaccess.offsetset.php )
|
|
*
|
|
* Assigns a value to the specified offset.
|
|
*
|
|
* @index mixed The offset to assign the value to.
|
|
* @newvalue mixed The value to set.
|
|
*
|
|
* @return mixed No value is returned.
|
|
*/
|
|
public function offsetSet($index, $newvalue);
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/arrayaccess.offsetunset.php )
|
|
*
|
|
* Unsets an offset.
|
|
*
|
|
* This method will not be called when type-casting to (unset)
|
|
*
|
|
* @index mixed The offset to unset.
|
|
*
|
|
* @return mixed No value is returned.
|
|
*/
|
|
public function offsetUnset($index);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/class.countable.php )
|
|
*
|
|
* Classes implementing Countable can be used with the count() function.
|
|
*
|
|
*/
|
|
interface Countable {
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/countable.count.php )
|
|
*
|
|
* This method is executed when using the count() function on an object
|
|
* implementing Countable.
|
|
*
|
|
* @return mixed The custom count as an integer.
|
|
*
|
|
* The return value is cast to an integer.
|
|
*/
|
|
public function count();
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/class.serializable.php )
|
|
*
|
|
* Interface for customized serializing.
|
|
*
|
|
* Classes that implement this interface no longer support __sleep() and
|
|
* __wakeup(). The method serialize 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 {
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/serializable.serialize.php )
|
|
*
|
|
* Should return the string representation of the object.
|
|
*
|
|
* This method acts as the destructor of the object. The __destruct()
|
|
* method will not be called after this method.
|
|
*
|
|
* @return mixed Returns the string representation of the object or
|
|
* NULL
|
|
*/
|
|
public function serialize();
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/serializable.unserialize.php )
|
|
*
|
|
* Called during unserialization of the object.
|
|
*
|
|
* This method acts as the constructor of the object. The __construct()
|
|
* method will not be called after this method.
|
|
*
|
|
* @serialized mixed The string representation of the object.
|
|
*
|
|
* @return mixed Returns the original value unserialized.
|
|
*/
|
|
public function unserialize($serialized);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/class.jsonserializable.php )
|
|
*
|
|
*/
|
|
interface JsonSerializable {
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/jsonserializable.jsonserialize.php )
|
|
*
|
|
* Specify data which should be serialized to JSON
|
|
*
|
|
*/
|
|
public function jsonSerialize();
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/class.traversable.php )
|
|
*
|
|
* Interface to detect if a class is traversable using foreach.
|
|
*
|
|
* Abstract base interface that cannot be implemented alone. Instead it
|
|
* must be implemented by either IteratorAggregate or Iterator.
|
|
*
|
|
* Internal (built-in) classes that implement this interface can be used
|
|
* in a foreach construct and do not need to implement IteratorAggregate or
|
|
* Iterator.
|
|
*
|
|
* This is an internal engine interface which cannot be implemented in PHP
|
|
* scripts. Either IteratorAggregate or Iterator must be used instead.
|
|
*
|
|
*/
|
|
interface Traversable {
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/class.iterator.php )
|
|
*
|
|
* Interface for external iterators or objects that can be iterated
|
|
* themselves internally.
|
|
*
|
|
*/
|
|
interface Iterator extends Traversable {
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/iterator.current.php )
|
|
*
|
|
* Returns the current element.
|
|
*
|
|
* @return mixed Can return any type.
|
|
*/
|
|
public function current();
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/iterator.key.php )
|
|
*
|
|
* Returns the key of the current element.
|
|
*
|
|
* @return mixed Returns scalar on success, or NULL on failure.
|
|
*/
|
|
public function key();
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/iterator.next.php )
|
|
*
|
|
* Moves the current position to the next element.
|
|
*
|
|
* This method is called after each foreach loop.
|
|
*
|
|
* @return mixed Any returned value is ignored.
|
|
*/
|
|
public function next();
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/iterator.rewind.php )
|
|
*
|
|
* Rewinds back to the first element of the Iterator.
|
|
*
|
|
* This is the first method called when starting a foreach loop. It will
|
|
* not be executed after foreach loops.
|
|
*
|
|
* @return mixed Any returned value is ignored.
|
|
*/
|
|
public function rewind();
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/iterator.valid.php )
|
|
*
|
|
* This method is called after Iterator::rewind() and Iterator::next() to
|
|
* check if the current position is valid.
|
|
*
|
|
* @return mixed The return value will be casted to boolean and then
|
|
* evaluated. Returns TRUE on success or FALSE on
|
|
* failure.
|
|
*/
|
|
public function valid();
|
|
}
|
|
|
|
interface KeyedIterator extends Iterator {
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/class.seekableiterator.php )
|
|
*
|
|
* The Seekable iterator.
|
|
*
|
|
*/
|
|
interface SeekableIterator extends Iterator {
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/seekableiterator.seek.php )
|
|
*
|
|
* Seeks to a given position in the iterator.
|
|
*
|
|
* @position mixed The position to seek to.
|
|
*
|
|
* @return mixed No value is returned.
|
|
*/
|
|
public function seek($position);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/class.outeriterator.php )
|
|
*
|
|
* Classes implementing OuterIterator can be used to iterate over
|
|
* iterators.
|
|
*
|
|
*/
|
|
interface OuterIterator extends Iterator {
|
|
public function getInnerIterator();
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/class.recursiveiterator.php )
|
|
*
|
|
* Classes implementing RecursiveIterator can be used to iterate over
|
|
* iterators recursively.
|
|
*
|
|
*/
|
|
interface RecursiveIterator extends Iterator {
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from
|
|
* http://php.net/manual/en/recursiveiterator.getchildren.php )
|
|
*
|
|
* Returns an iterator for the current iterator entry.
|
|
*
|
|
* @return mixed An iterator for the current entry.
|
|
*/
|
|
public function getChildren();
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from
|
|
* http://php.net/manual/en/recursiveiterator.haschildren.php )
|
|
*
|
|
* Returns if an iterator can be created fot the current entry.
|
|
* RecursiveIterator::getChildren().
|
|
*
|
|
* @return mixed Returns TRUE if the current entry can be iterated
|
|
* over, otherwise returns FALSE.
|
|
*/
|
|
public function hasChildren();
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from
|
|
* http://php.net/manual/en/class.recursiveiteratoriterator.php )
|
|
*
|
|
* Can be used to iterate through recursive iterators.
|
|
*
|
|
*/
|
|
class RecursiveIteratorIterator implements OuterIterator, Traversable {
|
|
|
|
private $rsrc;
|
|
|
|
const LEAVES_ONLY = 0;
|
|
const SELF_FIRST = 1;
|
|
const CHILD_FIRST = 2;
|
|
const CATCH_GET_CHILD = 16;
|
|
|
|
public function __construct($iterator,
|
|
$mode = RecursiveIteratorIterator::LEAVES_ONLY,
|
|
$flags = 0) {
|
|
hphp_recursiveiteratoriterator___construct($this, $iterator, $mode, $flags);
|
|
}
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from
|
|
* http://php.net/manual/en/recursiveiteratoriterator.getinneriterator.php
|
|
* )
|
|
*
|
|
* Gets the current active sub iterator. WarningThis function is currently
|
|
* not documented; only its argument list is available.
|
|
*
|
|
* @return mixed The current active sub iterator.
|
|
*/
|
|
public function getInnerIterator() {
|
|
return hphp_recursiveiteratoriterator_getinneriterator($this);
|
|
}
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from
|
|
* http://php.net/manual/en/recursiveiteratoriterator.current.php )
|
|
*
|
|
*
|
|
* @return mixed The current elements value.
|
|
*/
|
|
public function current() {
|
|
return hphp_recursiveiteratoriterator_current($this);
|
|
}
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from
|
|
* http://php.net/manual/en/recursiveiteratoriterator.key.php )
|
|
*
|
|
*
|
|
* @return mixed The current key.
|
|
*/
|
|
public function key() {
|
|
return hphp_recursiveiteratoriterator_key($this);
|
|
}
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from
|
|
* http://php.net/manual/en/recursiveiteratoriterator.next.php )
|
|
*
|
|
*
|
|
* @return mixed No value is returned.
|
|
*/
|
|
public function next() {
|
|
hphp_recursiveiteratoriterator_next($this);
|
|
}
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from
|
|
* http://php.net/manual/en/recursiveiteratoriterator.rewind.php )
|
|
*
|
|
*
|
|
* @return mixed No value is returned.
|
|
*/
|
|
public function rewind() {
|
|
hphp_recursiveiteratoriterator_rewind($this);
|
|
}
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from
|
|
* http://php.net/manual/en/recursiveiteratoriterator.valid.php )
|
|
*
|
|
*
|
|
* @return mixed TRUE if the current position is valid, otherwise
|
|
* FALSE
|
|
*/
|
|
public function valid() {
|
|
return hphp_recursiveiteratoriterator_valid($this);
|
|
}
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/class.arrayiterator.php )
|
|
*
|
|
* 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
|
|
* instantiate 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 ArrayAccess, SeekableIterator, Countable {
|
|
protected $arr;
|
|
protected $flags;
|
|
|
|
const STD_PROP_LIST = 1;
|
|
const ARRAY_AS_PROPS = 2;
|
|
|
|
public function __construct($array, $flags = 0) {
|
|
$this->arr = $array;
|
|
$this->flags = $flags;
|
|
reset($this->arr);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/arrayiterator.append.php )
|
|
*
|
|
* Appends value as the last element. WarningThis function is currently
|
|
* not documented; only its argument list is available.
|
|
*
|
|
* @value mixed The value to append.
|
|
*
|
|
* @return mixed No value is returned.
|
|
*/
|
|
public function append($value) {
|
|
$this->arr[] = $value;
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/arrayiterator.asort.php )
|
|
*
|
|
* Sorts an array by values. WarningThis function is currently not
|
|
* documented; only its argument list is available.
|
|
*
|
|
* @return mixed No value is returned.
|
|
*/
|
|
public function asort() {
|
|
return asort($this->arr, $this->flags);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/arrayiterator.count.php )
|
|
*
|
|
* Gets the number of elements in the array, or the number of public
|
|
* properties in the object. WarningThis function is currently not
|
|
* documented; only its argument list is available.
|
|
*
|
|
* @return mixed The number.
|
|
*/
|
|
public function count() {
|
|
return count($this->arr);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/arrayiterator.current.php )
|
|
*
|
|
* Get the current array entry.
|
|
*
|
|
* @return mixed The current array entry.
|
|
*/
|
|
public function current() {
|
|
return current($this->arr);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/arrayiterator.getarraycopy.php )
|
|
*
|
|
* Get a copy of an array. WarningThis function is currently not
|
|
* documented; only its argument list is available.
|
|
*
|
|
* @return mixed A copy of the array, or array of public properties
|
|
* if ArrayIterator refers to an object.
|
|
*/
|
|
public function getArrayCopy() {
|
|
return $this->arr;
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/arrayiterator.getflags.php )
|
|
*
|
|
* Get the current flags. WarningThis function is currently not
|
|
* documented; only its argument list is available.
|
|
*
|
|
* @return mixed The current flags.
|
|
*/
|
|
public function getFlags() {
|
|
return $this->flags;
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/arrayiterator.key.php )
|
|
*
|
|
* This function returns the current array key
|
|
*
|
|
* @return mixed The current array key.
|
|
*/
|
|
public function key() {
|
|
return key($this->arr);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/arrayiterator.ksort.php )
|
|
*
|
|
* Sorts an array by the keys. WarningThis function is currently not
|
|
* documented; only its argument list is available.
|
|
*
|
|
* @return mixed No value is returned.
|
|
*/
|
|
public function ksort() {
|
|
return ksort($this->arr, $this->flags);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/arrayiterator.natcasesort.php )
|
|
*
|
|
* Sort the entries by values using a case insensitive "natural order"
|
|
* algorithm. WarningThis function is currently not documented; only its
|
|
* argument list is available.
|
|
*
|
|
* @return mixed No value is returned.
|
|
*/
|
|
public function natcasesort() {
|
|
return natcasesort($this->arr);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/arrayiterator.natsort.php )
|
|
*
|
|
* Sort the entries by values using "natural order" algorithm. WarningThis
|
|
* function is currently not documented; only its argument list is
|
|
* available.
|
|
*
|
|
* @return mixed No value is returned.
|
|
*/
|
|
public function natsort() {
|
|
return natsort($this->arr);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/arrayiterator.next.php )
|
|
*
|
|
* The iterator to the next entry.
|
|
*
|
|
* @return mixed No value is returned.
|
|
*/
|
|
public function next() {
|
|
next($this->arr);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/arrayiterator.offsetexists.php )
|
|
*
|
|
* Checks if the offset exists. WarningThis function is currently not
|
|
* documented; only its argument list is available.
|
|
*
|
|
* @index mixed The offset being checked.
|
|
*
|
|
* @return mixed TRUE if the offset exists, otherwise FALSE
|
|
*/
|
|
public function offsetExists($index) {
|
|
return isset($this->arr[$index]);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/arrayiterator.offsetget.php )
|
|
*
|
|
* Gets the value from the provided offset. WarningThis function is
|
|
* currently not documented; only its argument list is available.
|
|
*
|
|
* @index mixed The offset to get the value from.
|
|
*
|
|
* @return mixed The value at offset index.
|
|
*/
|
|
public function offsetGet($index) {
|
|
return $this->arr[$index];
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/arrayiterator.offsetset.php )
|
|
*
|
|
* Sets a value for a given offset. WarningThis function is currently not
|
|
* documented; only its argument list is available.
|
|
*
|
|
* @index mixed The index to set for.
|
|
* @newval mixed The new value to store at the index.
|
|
*
|
|
* @return mixed No value is returned.
|
|
*/
|
|
public function offsetSet($index, $newval) {
|
|
$this->arr[$index] = $newval;
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/arrayiterator.offsetunset.php )
|
|
*
|
|
* Unsets a value for an offset. WarningThis function is currently not
|
|
* documented; only its argument list is available.
|
|
*
|
|
* @index mixed The offset to unset.
|
|
*
|
|
* @return mixed No value is returned.
|
|
*/
|
|
public function offsetUnset($index) {
|
|
unset($this->arr[$index]);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/arrayiterator.rewind.php )
|
|
*
|
|
* This rewinds the iterator to the beginning.
|
|
*
|
|
* @return mixed No value is returned.
|
|
*/
|
|
public function rewind() {
|
|
reset($this->arr);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/arrayiterator.seek.php )
|
|
*
|
|
*
|
|
* @position mixed The position to seek to.
|
|
*
|
|
* @return mixed No value is returned.
|
|
*/
|
|
public function seek($position) {
|
|
reset($this->arr);
|
|
for ($i = 0; $i < $position; $i++) {
|
|
if (!next($this->arr)) {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/arrayiterator.setflags.php )
|
|
*
|
|
* Sets behaviour flags. WarningThis function is currently not documented;
|
|
* only its argument list is available.
|
|
*
|
|
* @flags mixed A bitmask as follows: 0 = Properties of the object
|
|
* have their normal functionality when accessed as
|
|
* list (var_dump, foreach, etc.). 1 = Array indices
|
|
* can be accessed as properties in read/write.
|
|
*
|
|
* @return mixed No value is returned.
|
|
*/
|
|
public function setFlags($flags) {
|
|
$this->flags = $flags;
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/arrayiterator.uasort.php )
|
|
*
|
|
* Sort the entries by values using user defined function. WarningThis
|
|
* function is currently not documented; only its argument list is
|
|
* available.
|
|
*
|
|
* @cmp_function
|
|
* mixed The compare function used for the sort.
|
|
*
|
|
* @return mixed No value is returned.
|
|
*/
|
|
public function uasort($cmp_function) {
|
|
return uasort($this->arr, $cmp_function);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/arrayiterator.uksort.php )
|
|
*
|
|
* Sort the entries by key using user defined function. WarningThis
|
|
* function is currently not documented; only its argument list is
|
|
* available.
|
|
*
|
|
* @cmp_function
|
|
* mixed The compare function used for the sort.
|
|
*
|
|
* @return mixed No value is returned.
|
|
*/
|
|
public function uksort($cmp_function) {
|
|
return uksort($this->arr, $cmp_function);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/arrayiterator.valid.php )
|
|
*
|
|
* Checks if the array contains any more entries.
|
|
*
|
|
* @return mixed No value is returned.
|
|
*/
|
|
public function valid() {
|
|
return key($this->arr) !== null;
|
|
}
|
|
}
|
|
|
|
// http://www.php.net/~helly/php/ext/spl/iteratoriterator_8inc-source.html
|
|
class IteratorIterator implements OuterIterator {
|
|
private $iterator;
|
|
|
|
public function __construct(Traversable $iterator) {
|
|
if ($iterator instanceof IteratorAggregate) {
|
|
$iterator = $iterator->getIterator();
|
|
}
|
|
if ($iterator instanceof Iterator) {
|
|
$this->iterator = $iterator;
|
|
} else {
|
|
throw new Exception(
|
|
"Need to pass a Traversable that is convertable to an iterator");
|
|
}
|
|
}
|
|
|
|
public function getInnerIterator() {
|
|
return $this->iterator;
|
|
}
|
|
|
|
public function valid() {
|
|
return $this->iterator->valid();
|
|
}
|
|
|
|
public function key() {
|
|
return $this->iterator->key();
|
|
}
|
|
|
|
public function current() {
|
|
return $this->iterator->current();
|
|
}
|
|
|
|
public function next() {
|
|
return $this->iterator->next();
|
|
}
|
|
|
|
public function rewind() {
|
|
return $this->iterator->rewind();
|
|
}
|
|
|
|
public function __call($func, $params) {
|
|
return call_user_func_array(array($this->iterator, $func), $params);
|
|
}
|
|
}
|
|
|
|
// http://www.php.net/~helly/php/ext/spl/filteriterator_8inc-source.html
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/class.filteriterator.php )
|
|
*
|
|
* This abstract iterator filters out unwanted values. This class should
|
|
* be extended to implement custom iterator filters. The
|
|
* FilterIterator::accept() must be implemented in the subclass.
|
|
*
|
|
*/
|
|
abstract class FilterIterator extends IteratorIterator {
|
|
private $it;
|
|
|
|
public function __construct(Iterator $it) {
|
|
$this->it = $it;
|
|
}
|
|
|
|
public function rewind() {
|
|
$this->it->rewind();
|
|
$this->fetch();
|
|
}
|
|
|
|
abstract function accept();
|
|
|
|
private function fetch() {
|
|
while ($this->it->valid()) {
|
|
if ($this->accept()) {
|
|
return;
|
|
}
|
|
$this->it->next();
|
|
}
|
|
}
|
|
|
|
public function next() {
|
|
$this->it->next();
|
|
$this->fetch();
|
|
}
|
|
|
|
public function valid() {
|
|
return $this->it->valid();
|
|
}
|
|
|
|
public function key() {
|
|
return $this->it->key();
|
|
}
|
|
|
|
public function current() {
|
|
return $this->it->current();
|
|
}
|
|
|
|
protected function __clone() {
|
|
// disallow clone
|
|
}
|
|
|
|
public function getInnerIterator() {
|
|
return $this->it;
|
|
}
|
|
|
|
public function __call($func, $params) {
|
|
return call_user_func_array(array($this->it, $func), $params);
|
|
}
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/class.iteratoraggregate.php )
|
|
*
|
|
* Interface to create an external Iterator.
|
|
*
|
|
*/
|
|
interface IteratorAggregate extends Traversable {
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from
|
|
* http://php.net/manual/en/iteratoraggregate.getiterator.php )
|
|
*
|
|
* Returns an external iterator.
|
|
*
|
|
* @return mixed An instance of an object implementing Iterator or
|
|
* Traversable
|
|
*/
|
|
public function getIterator();
|
|
}
|
|
|
|
interface Iterable extends IteratorAggregate {
|
|
}
|
|
|
|
interface KeyedIterable extends Iterable {
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// http://www.php.net/~helly/php/ext/spl/appenditerator_8inc-source.html
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/class.appenditerator.php )
|
|
*
|
|
* An Iterator that iterates over several iterators one after the other.
|
|
*
|
|
*/
|
|
class AppendIterator implements OuterIterator {
|
|
private $iterators;
|
|
|
|
function __construct() {
|
|
$this->iterators = new ArrayIterator(array());
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/appenditerator.append.php )
|
|
*
|
|
* Appends an iterator. WarningThis function is currently not documented;
|
|
* only its argument list is available.
|
|
*
|
|
* @it mixed The iterator to append.
|
|
*
|
|
* @return mixed No value is returned.
|
|
*/
|
|
function append(Iterator $it) {
|
|
$this->iterators->append($it);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from
|
|
* http://php.net/manual/en/appenditerator.getinneriterator.php )
|
|
*
|
|
* Get an inner iterator WarningThis function is currently not documented;
|
|
* only its argument list is available.
|
|
*
|
|
* @return mixed The current inner Iterator.
|
|
*/
|
|
function getInnerIterator() {
|
|
return $this->iterators->current();
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/appenditerator.rewind.php )
|
|
*
|
|
* Rewind to the first element of the first inner Iterator. WarningThis
|
|
* function is currently not documented; only its argument list is
|
|
* available.
|
|
*
|
|
* @return mixed No value is returned.
|
|
*/
|
|
function rewind() {
|
|
$this->iterators->rewind();
|
|
if ($this->iterators->valid()) {
|
|
$this->getInnerIterator()->rewind();
|
|
}
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/appenditerator.valid.php )
|
|
*
|
|
* Checks validity of the current element. WarningThis function is
|
|
* currently not documented; only its argument list is available.
|
|
*
|
|
* @return mixed Returns TRUE on success or FALSE on failure.
|
|
*/
|
|
function valid() {
|
|
return $this->iterators->valid() && $this->getInnerIterator()->valid();
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/appenditerator.current.php )
|
|
*
|
|
* Gets the current value. WarningThis function is currently not
|
|
* documented; only its argument list is available.
|
|
*
|
|
* @return mixed The current value if it is valid or NULL otherwise.
|
|
*/
|
|
function current() {
|
|
/* Using $this->valid() would be exactly the same; it would omit
|
|
* the access to a non valid element in the inner iterator. Since
|
|
* the user didn't respect the valid() return value false this
|
|
* must be intended hence we go on. */
|
|
return $this->iterators->valid() ?
|
|
$this->getInnerIterator()->current() : NULL;
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/appenditerator.key.php )
|
|
*
|
|
* Get the current key WarningThis function is currently not documented;
|
|
* only its argument list is available.
|
|
*
|
|
* @return mixed The current key if it is valid or NULL otherwise.
|
|
*/
|
|
function key() {
|
|
return $this->iterators->valid() ? $this->getInnerIterator()->key() : NULL;
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/appenditerator.next.php )
|
|
*
|
|
* Moves to the next element. If this means to another Iterator then it
|
|
* rewinds that Iterator. WarningThis function is currently not documented;
|
|
* only its argument list is available.
|
|
*
|
|
* @return mixed No value is returned.
|
|
*/
|
|
function next() {
|
|
if (!$this->iterators->valid()){
|
|
return; /* done all */
|
|
}
|
|
$this->getInnerIterator()->next();
|
|
if ($this->getInnerIterator()->valid()) {
|
|
return; /* found valid element in current inner iterator */
|
|
}
|
|
$this->iterators->next();
|
|
while ($this->iterators->valid()) {
|
|
$this->getInnerIterator()->rewind();
|
|
if ($this->getInnerIterator()->valid()) {
|
|
return; /* found element as first elemet in another iterator */
|
|
}
|
|
$this->iterators->next();
|
|
}
|
|
}
|
|
|
|
function __call($func, $params) {
|
|
return call_user_func_array(array($this->getInnerIterator(), $func),
|
|
$params);
|
|
}
|
|
}
|
|
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/class.splfileinfo.php )
|
|
*
|
|
* The SplFileInfo class offers a high-level object oriented interface to
|
|
* information for an individual file.
|
|
*
|
|
*/
|
|
class SplFileInfo {
|
|
private $rsrc;
|
|
|
|
public function __construct($file_name) {
|
|
hphp_splfileinfo___construct($this, $file_name);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/splfileinfo.getpath.php )
|
|
*
|
|
* Returns the path to the file, omitting the filename and any trailing
|
|
* slash.
|
|
*
|
|
* @return mixed Returns the path to the file.
|
|
*/
|
|
public function getPath() {
|
|
return hphp_splfileinfo_getpath($this);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/splfileinfo.getfilename.php )
|
|
*
|
|
* Gets the filename without any path information.
|
|
*
|
|
* @return mixed The filename.
|
|
*/
|
|
public function getFilename() {
|
|
return hphp_splfileinfo_getfilename($this);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/splfileinfo.getfileinfo.php )
|
|
*
|
|
* This method gets an SplFileInfo object for the referenced file.
|
|
*
|
|
* @class_name mixed Name of an SplFileInfo derived class to use.
|
|
*
|
|
* @return mixed An SplFileInfo object created for the file.
|
|
*/
|
|
public function getFileInfo($class_name = "") {
|
|
return hphp_splfileinfo_getfileinfo($this, $class_name);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/splfileinfo.getbasename.php )
|
|
*
|
|
* This method returns the base name of the file, directory, or link
|
|
* without path info.
|
|
*
|
|
* @suffix mixed Optional suffix to omit from the base name returned.
|
|
*
|
|
* @return mixed Returns the base name without path information.
|
|
*/
|
|
public function getBasename($suffix = "") {
|
|
return hphp_splfileinfo_getbasename($this, $suffix);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/splfileinfo.getpathname.php )
|
|
*
|
|
* Returns the path to the file.
|
|
*
|
|
* @return mixed The path to the file.
|
|
*/
|
|
public function getPathname() {
|
|
return hphp_splfileinfo_getpathname($this);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/splfileinfo.getpathinfo.php )
|
|
*
|
|
* Gets an SplFileInfo object for the parent of the current file.
|
|
*
|
|
* @class_name mixed Name of an SplFileInfo derived class to use.
|
|
*
|
|
* @return mixed Returns an SplFileInfo object for the parent path of
|
|
* the file.
|
|
*/
|
|
public function getPathInfo($class_name = "") {
|
|
return hphp_splfileinfo_getpathinfo($this, $class_name);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/splfileinfo.getperms.php )
|
|
*
|
|
* Gets the file permissions for the file.
|
|
*
|
|
* @return mixed Returns the file permissions.
|
|
*/
|
|
public function getPerms() {
|
|
return hphp_splfileinfo_getperms($this);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/splfileinfo.getinode.php )
|
|
*
|
|
* Gets the inode number for the filesystem object.
|
|
*
|
|
* @return mixed Returns the inode number for the filesystem object.
|
|
*/
|
|
public function getInode() {
|
|
return hphp_splfileinfo_getinode($this);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/splfileinfo.getsize.php )
|
|
*
|
|
* Returns the filesize in bytes for the file referenced.
|
|
*
|
|
* @return mixed The filesize in bytes.
|
|
*/
|
|
public function getSize() {
|
|
return hphp_splfileinfo_getsize($this);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/splfileinfo.getowner.php )
|
|
*
|
|
* Gets the file owner. The owner ID is returned in numerical format.
|
|
*
|
|
* @return mixed The owner id in numerical format.
|
|
*/
|
|
public function getOwner() {
|
|
return hphp_splfileinfo_getowner($this);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/splfileinfo.getgroup.php )
|
|
*
|
|
* Gets the file group. The group ID is returned in numerical format.
|
|
*
|
|
* @return mixed The group id in numerical format.
|
|
*/
|
|
public function getGroup() {
|
|
return hphp_splfileinfo_getgroup($this);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/splfileinfo.getatime.php )
|
|
*
|
|
* Gets the last access time for the file.
|
|
*
|
|
* @return mixed Returns the time the file was last accessed.
|
|
*/
|
|
public function getATime() {
|
|
return hphp_splfileinfo_getatime($this);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/splfileinfo.getmtime.php )
|
|
*
|
|
* Returns the time when the contents of the file were changed. The time
|
|
* returned is a Unix timestamp.
|
|
*
|
|
* @return mixed Returns the last modified time for the file, in a
|
|
* Unix timestamp.
|
|
*/
|
|
public function getMTime() {
|
|
return hphp_splfileinfo_getmtime($this);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/splfileinfo.getctime.php )
|
|
*
|
|
* Returns the inode change time for the file. The time returned is a Unix
|
|
* timestamp.
|
|
*
|
|
* @return mixed The last change time, in a Unix timestamp.
|
|
*/
|
|
public function getCTime() {
|
|
return hphp_splfileinfo_getctime($this);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/splfileinfo.gettype.php )
|
|
*
|
|
* Returns the type of the file referenced.
|
|
*
|
|
* @return mixed A string representing the type of the entry. May be
|
|
* one of file, link, or dir
|
|
*/
|
|
public function getType() {
|
|
return hphp_splfileinfo_gettype($this);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/splfileinfo.iswritable.php )
|
|
*
|
|
* Checks if the current entry is writable.
|
|
*
|
|
* @return mixed Returns TRUE if writable, FALSE otherwise;
|
|
*/
|
|
public function isWritable() {
|
|
return hphp_splfileinfo_iswritable($this);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/splfileinfo.isreadable.php )
|
|
*
|
|
* Check if the file is readable.
|
|
*
|
|
* @return mixed Returns TRUE if readable, FALSE otherwise.
|
|
*/
|
|
public function isReadable() {
|
|
return hphp_splfileinfo_isreadable($this);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/splfileinfo.isexecutable.php )
|
|
*
|
|
* Checks if the file is executable.
|
|
*
|
|
* @return mixed Returns TRUE if executable, FALSE otherwise.
|
|
*/
|
|
public function isExecutable() {
|
|
return hphp_splfileinfo_isexecutable($this);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/splfileinfo.isfile.php )
|
|
*
|
|
* Checks if the file referenced by this SplFileInfo object exists and is
|
|
* a regular file.
|
|
*
|
|
* @return mixed Returns TRUE if the file exists and is a regular
|
|
* file (not a link), FALSE otherwise.
|
|
*/
|
|
public function isFile() {
|
|
return hphp_splfileinfo_isfile($this);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/splfileinfo.isdir.php )
|
|
*
|
|
* This method can be used to determine if the file is a directory.
|
|
*
|
|
* @return mixed Returns TRUE if a directory, FALSE otherwise.
|
|
*/
|
|
public function isDir() {
|
|
return hphp_splfileinfo_isdir($this);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/splfileinfo.islink.php )
|
|
*
|
|
* Use this method to check if the file referenced by the SplFileInfo
|
|
* object is a link.
|
|
*
|
|
* @return mixed Returns TRUE if the file is a link, FALSE otherwise.
|
|
*/
|
|
public function isLink() {
|
|
return hphp_splfileinfo_islink($this);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/splfileinfo.getlinktarget.php )
|
|
*
|
|
* Gets the target of a filesystem link.
|
|
*
|
|
* The target may not be the real path on the filesystem. Use
|
|
* SplFileInfo::getRealPath() to determine the true path on the filesystem.
|
|
*
|
|
* @return mixed Returns the target of the filesystem link.
|
|
*/
|
|
public function getLinkTarget() {
|
|
return hphp_splfileinfo_getlinktarget($this);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/splfileinfo.getrealpath.php )
|
|
*
|
|
* This method expands all symbolic links, resolves relative references
|
|
* and returns the real path to the file.
|
|
*
|
|
* @return mixed Returns the path to the file.
|
|
*/
|
|
public function getRealPath() {
|
|
return hphp_splfileinfo_getrealpath($this);
|
|
}
|
|
|
|
public function __toString() {
|
|
return hphp_splfileinfo___tostring($this);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/splfileinfo.openfile.php )
|
|
*
|
|
* Creates an SplFileObject object of the file. This is useful because
|
|
* SplFileObject contains additional methods for manipulating the file
|
|
* whereas SplFileInfo is only useful for gaining information, like whether
|
|
* the file is writable.
|
|
*
|
|
* @mode mixed The mode for opening the file. See the fopen()
|
|
* documentation for descriptions of possible modes.
|
|
* The default is read only.
|
|
* @use_include_path
|
|
* mixed When set to TRUE, the filename is also searched for
|
|
* within the include_path
|
|
* @context mixed Refer to the context section of the manual for a
|
|
* description of contexts.
|
|
*
|
|
* @return mixed The opened file as an SplFileObject object.
|
|
*/
|
|
public function openFile($mode = 'r', $use_include_path = false,
|
|
$context = null) {
|
|
return hphp_splfileinfo_openfile($this, $mode,
|
|
$use_include_path, $context);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/splfileinfo.setfileclass.php )
|
|
*
|
|
* Set the class name which SplFileInfo will use to open files with when
|
|
* openFile() is called. The class name passed to this method must be
|
|
* derived from SplFileObject.
|
|
*
|
|
* @class_name mixed The class name to use when openFile() is called.
|
|
*
|
|
* @return mixed No value is returned.
|
|
*/
|
|
public function setFileClass($class_name = "SplFileObject") {
|
|
hphp_splfileinfo_setfileclass($this, $class_name);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/splfileinfo.setinfoclass.php )
|
|
*
|
|
* Use this method to set a custom class which will be used when
|
|
* getFileInfo and getPathInfo are called. The class name passed to this
|
|
* method must be derived from SplFileInfo.
|
|
*
|
|
* @class_name mixed The class name to use.
|
|
*
|
|
* @return mixed No value is returned.
|
|
*/
|
|
public function setInfoClass($class_name = "SplFileInfo") {
|
|
hphp_splfileinfo_setinfoclass($this, $class_name);
|
|
}
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/class.splfileobject.php )
|
|
*
|
|
* The SplFileObject class offers an object oriented interface for a file.
|
|
*
|
|
*/
|
|
class SplFileObject extends SplFileInfo implements RecursiveIterator,
|
|
Traversable, SeekableIterator {
|
|
|
|
const DROP_NEW_LINE = 1;
|
|
const READ_AHEAD = 2;
|
|
const SKIP_EMPTY = 6;
|
|
const READ_CSV = 8;
|
|
|
|
public function __construct($filename, $open_mode = 'r',
|
|
$use_include_path = false,
|
|
$context = null) {
|
|
hphp_splfileobject___construct($this, $filename, $open_mode,
|
|
$use_include_path, $context);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/splfileobject.current.php )
|
|
*
|
|
* Retrieves the current line of the file.
|
|
*
|
|
* @return mixed Retrieves the current line of the file. If the
|
|
* SplFileObject::READ_CSV flag is set, this method
|
|
* returns an array containing the current line parsed
|
|
* as CSV data.
|
|
*/
|
|
public function current() {
|
|
return hphp_splfileobject_current($this);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/splfileobject.eof.php )
|
|
*
|
|
* Determine whether the end of file has been reached
|
|
*
|
|
* @return mixed Returns TRUE if file is at EOF, FALSE otherwise.
|
|
*/
|
|
public function eof() {
|
|
return hphp_splfileobject_eof($this);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/splfileobject.fflush.php )
|
|
*
|
|
* Forces a write of all buffered output to the file.
|
|
*
|
|
* @return mixed Returns TRUE on success or FALSE on failure.
|
|
*/
|
|
public function fflush() {
|
|
return hphp_splfileobject_fflush($this);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/splfileobject.fgetc.php )
|
|
*
|
|
* Gets a character from the file.
|
|
*
|
|
* @return mixed Returns a string containing a single character read
|
|
* from the file or FALSE on EOF. WarningThis function
|
|
* may return Boolean FALSE, but may also return a
|
|
* non-Boolean value which evaluates to FALSE, such as
|
|
* 0 or "". Please read the section on Booleans for
|
|
* more information. Use the === operator for testing
|
|
* the return value of this function.
|
|
*/
|
|
public function fgetc() {
|
|
return hphp_splfileobject_fgetc($this);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/splfileobject.fgetcsv.php )
|
|
*
|
|
* Gets a line from the file which is in CSV format and returns an array
|
|
* containing the fields read.
|
|
*
|
|
* @delimiter mixed The field delimiter (one character only). Defaults
|
|
* as a comma or the value set using
|
|
* SplFileObject::setCsvControl().
|
|
* @enclosure mixed The field enclosure character (one character only).
|
|
* Defaults as a double quotation mark or the value set
|
|
* using SplFileObject::setCsvControl().
|
|
* @escape mixed The escape character (one character only). Defaults
|
|
* as a backslash (\) or the value set using
|
|
* SplFileObject::setCsvControl().
|
|
*
|
|
* @return mixed Returns an indexed array containing the fields read,
|
|
* or FALSE on error.
|
|
*
|
|
* A blank line in a CSV file will be returned as an
|
|
* array comprising a single NULL field unless using
|
|
* SplFileObject::SKIP_EMPTY |
|
|
* SplFileObject::DROP_NEW_LINE, in which case empty
|
|
* lines are skipped.
|
|
*/
|
|
public function fgetcsv($delimiter = ",", $enclosure = "\"",
|
|
$escape = "\\") {
|
|
return hphp_splfileobject_fgetcsv($this, $delimiter,
|
|
$enclosure, $escape);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/splfileobject.fgets.php )
|
|
*
|
|
* Gets a line from the file.
|
|
*
|
|
* @return mixed Returns a string containing the next line from the
|
|
* file, or FALSE on error.
|
|
*/
|
|
public function fgets() {
|
|
return hphp_splfileobject_fgets($this);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/splfileobject.fgetss.php )
|
|
*
|
|
* Identical to SplFileObject::fgets(), except that
|
|
* SplFileObject::fgetss() attempts to strip any HTML and PHP tags from the
|
|
* text it reads.
|
|
*
|
|
* @allowable_tags
|
|
* mixed You can use the optional third parameter to specify
|
|
* tags which should not be stripped.
|
|
*
|
|
* @return mixed Returns a string containing the next line of the
|
|
* file with HTML and PHP code stripped, or FALSE on
|
|
* error.
|
|
*/
|
|
public function fgetss($allowable_tags) {
|
|
return hphp_splfileobject_fgetss($this, $allowable_tags);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/splfileobject.flock.php )
|
|
*
|
|
* Locks or unlocks the file in the same portable way as flock().
|
|
*
|
|
* @operation mixed operation is one of the following: LOCK_SH to
|
|
* acquire a shared lock (reader). LOCK_EX to acquire
|
|
* an exclusive lock (writer). LOCK_UN to release a
|
|
* lock (shared or exclusive). LOCK_NB to not block
|
|
* while locking (not supported on Windows).
|
|
* @wouldblock mixed Set to TRUE if the lock would block (EWOULDBLOCK
|
|
* errno condition).
|
|
*
|
|
* @return mixed Returns TRUE on success or FALSE on failure.
|
|
*/
|
|
public function flock($operation, &$wouldblock) {
|
|
return hphp_splfileobject_flock($this, $wouldblock);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/splfileobject.fpassthru.php )
|
|
*
|
|
* Reads to EOF on the given file pointer from the current position and
|
|
* writes the results to the output buffer.
|
|
*
|
|
* You may need to call SplFileObject::rewind() to reset the file pointer
|
|
* to the beginning of the file if you have already written data to the
|
|
* file.
|
|
*
|
|
* @return mixed Returns the number of characters read from handle
|
|
* and passed through to the output.
|
|
*/
|
|
public function fpassthru() {
|
|
return hphp_splfileobject_fpassthru($this);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/splfileobject.fscanf.php )
|
|
*
|
|
* Reads a line from the file and interprets it according to the specified
|
|
* format, which is described in the documentation for sprintf().
|
|
*
|
|
* Any whitespace in the format string matches any whitespace in the line
|
|
* from the file. This means that even a tab \t in the format string can
|
|
* match a single space character in the input stream.
|
|
*
|
|
* @format mixed The specified format as described in the sprintf()
|
|
* documentation.
|
|
*
|
|
* @return mixed If only two parameters were passed to this method,
|
|
* the values parsed will be returned as an array.
|
|
* Otherwise, if optional parameters are passed, the
|
|
* function will return the number of assigned values.
|
|
* The optional parameters must be passed by reference.
|
|
*/
|
|
public function fscanf($format) {
|
|
$argc = func_num_args();
|
|
$argv = func_get_args();
|
|
return hphp_splfileobject_fscanf($argc, $this, $format, $argv);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/splfileobject.fseek.php )
|
|
*
|
|
* Seek to a position in the file measured in bytes from the beginning of
|
|
* the file, obtained by adding offset to the position specified by whence.
|
|
*
|
|
* @offset mixed The offset. A negative value can be used to move
|
|
* backwards through the file which is useful when
|
|
* SEEK_END is used as the whence value.
|
|
* @whence mixed whence values are: SEEK_SET - Set position equal to
|
|
* offset bytes. SEEK_CUR - Set position to current
|
|
* location plus offset. SEEK_END - Set position to
|
|
* end-of-file plus offset.
|
|
*
|
|
* If whence is not specified, it is assumed to be
|
|
* SEEK_SET.
|
|
*
|
|
* @return mixed Returns 0 if the seek was successful, -1 otherwise.
|
|
* Note that seeking past EOF is not considered an
|
|
* error.
|
|
*/
|
|
public function fseek($offset, $whence) {
|
|
return hphp_splfileobject_fseek($this, $offset, $whence);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/splfileobject.fstat.php )
|
|
*
|
|
* Gathers the statistics of the file. Behaves identically to fstat().
|
|
*
|
|
* @return mixed Returns an array with the statistics of the file;
|
|
* the format of the array is described in detail on
|
|
* the stat() manual page.
|
|
*/
|
|
public function fstat() {
|
|
return hphp_splfileobject_fstat($this);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/splfileobject.ftell.php )
|
|
*
|
|
* Returns the position of the file pointer which represents the current
|
|
* offset in the file stream.
|
|
*
|
|
* @return mixed Returns the position of the file pointer as an
|
|
* integer, or FALSE on error.
|
|
*/
|
|
public function ftell() {
|
|
return hphp_splfileobject_ftell($this);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/splfileobject.ftruncate.php )
|
|
*
|
|
* Truncates the file to size bytes.
|
|
*
|
|
* @size mixed The size to truncate to.
|
|
*
|
|
* If size is larger than the file it is extended with
|
|
* null bytes.
|
|
*
|
|
* If size is smaller than the file, the extra data
|
|
* will be lost.
|
|
*
|
|
* @return mixed Returns TRUE on success or FALSE on failure.
|
|
*/
|
|
public function ftruncate($size) {
|
|
return hphp_splfileobject_ftruncate($this, $size);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/splfileobject.fwrite.php )
|
|
*
|
|
* Writes the contents of string to the file
|
|
*
|
|
* @str mixed The string to be written to the file.
|
|
* @length mixed If the length argument is given, writing will stop
|
|
* after length bytes have been written or the end of
|
|
* string is reached, whichever comes first.
|
|
*
|
|
* @return mixed Returns the number of bytes written, or NULL on
|
|
* error.
|
|
*/
|
|
public function fwrite($str, $length) {
|
|
return hphp_splfileobject_fwrite($this, $str, $length);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/splfileobject.getchildren.php )
|
|
*
|
|
* An SplFileObject does not have children so this method returns NULL.
|
|
*
|
|
* @return mixed No value is returned.
|
|
*/
|
|
public function getChildren() {
|
|
return null; // An SplFileOjbect does not have children
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/splfileobject.getcsvcontrol.php
|
|
* )
|
|
*
|
|
* Gets the delimiter and enclosure character used for parsing CSV fields.
|
|
*
|
|
* @return mixed Returns an indexed array containing the delimiter
|
|
* and enclosure character.
|
|
*/
|
|
public function getCsvControl() {
|
|
return hphp_splfileobject_getcvscontrol($this);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/splfileobject.getflags.php )
|
|
*
|
|
* Gets the flags set for an instance of SplFileObject as an integer.
|
|
*
|
|
* @return mixed Returns an integer representing the flags.
|
|
*/
|
|
public function getFlags() {
|
|
return hphp_splfileobject_getflags($this);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/splfileobject.getmaxlinelen.php
|
|
* )
|
|
*
|
|
* Gets the maximum line length as set by SplFileObject::setMaxLineLen().
|
|
*
|
|
* @return mixed Returns the maximum line length if one has been set
|
|
* with SplFileObject::setMaxLineLen(), default is 0.
|
|
*/
|
|
public function getMaxLineLen() {
|
|
return hphp_splfileobject_getmaxlinelen($this);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/splfileobject.haschildren.php )
|
|
*
|
|
* An SplFileObject does not have children so this method always return
|
|
* FALSE.
|
|
*
|
|
* @return mixed Returns FALSE
|
|
*/
|
|
public function hasChildren() {
|
|
return false; // An SplFileOjbect does not have children
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/splfileobject.key.php )
|
|
*
|
|
* Gets the current line number.
|
|
*
|
|
* This number may not reflect the actual line number in the file if
|
|
* SplFileObject::setMaxLineLen() is used to read fixed lengths of the
|
|
* file.
|
|
*
|
|
* @return mixed Returns the current line number.
|
|
*/
|
|
public function key() {
|
|
return hphp_splfileobject_key($this);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/splfileobject.next.php )
|
|
*
|
|
* Moves ahead to the next line in the file.
|
|
*
|
|
* @return mixed No value is returned.
|
|
*/
|
|
public function next() {
|
|
hphp_splfileobject_next($this);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/splfileobject.rewind.php )
|
|
*
|
|
* Rewinds the file back to the first line.
|
|
*
|
|
* @return mixed No value is returned.
|
|
*/
|
|
public function rewind() {
|
|
hphp_splfileobject_rewind($this);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/splfileobject.seek.php )
|
|
*
|
|
* Seek to specified line in the file.
|
|
*
|
|
* @line_pos mixed The zero-based line number to seek to.
|
|
*
|
|
* @return mixed No value is returned.
|
|
*/
|
|
public function seek($line_pos) {
|
|
hphp_splfileobject_seek($this, $line_pos);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/splfileobject.setcsvcontrol.php
|
|
* )
|
|
*
|
|
* Sets the delimiter and enclosure character for parsing CSV fields.
|
|
*
|
|
* @delimiter mixed The field delimiter (one character only).
|
|
* @enclosure mixed The field enclosure character (one character only).
|
|
* @escape mixed The field escape character (one character only).
|
|
*
|
|
* @return mixed No value is returned.
|
|
*/
|
|
public function setCsvControl($delimiter = ",", $enclosure = "\"",
|
|
$escape = "\\") {
|
|
hphp_splfileobject_setcsvcontrol($this, $delimiter, $enclosure, $escape);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/splfileobject.setflags.php )
|
|
*
|
|
* Sets the flags to be used by the SplFileObject.
|
|
*
|
|
* @flags mixed Bit mask of the flags to set. See SplFileObject
|
|
* constants for the available flags.
|
|
*
|
|
* @return mixed No value is returned.
|
|
*/
|
|
public function setFlags($flags) {
|
|
hphp_splfileobject_setflags($this, $flags);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/splfileobject.setmaxlinelen.php
|
|
* )
|
|
*
|
|
* Sets the maximum length of a line to be read.
|
|
*
|
|
* @max_len mixed The maximum length of a line.
|
|
*
|
|
* @return mixed No value is returned.
|
|
*/
|
|
public function setMaxLineLen($max_len) {
|
|
hphp_splfileobject_setmaxlinelen($this, $max_len);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/splfileobject.valid.php )
|
|
*
|
|
* Check whether EOF has been reached.
|
|
*
|
|
* @return mixed Returns TRUE if not reached EOF, FALSE otherwise.
|
|
*/
|
|
public function valid() {
|
|
return hphp_splfileobject_valid($this);
|
|
}
|
|
}
|
|
|
|
interface Awaitable {
|
|
public function getWaitHandle();
|
|
}
|
|
|
|
interface DebuggerCommand {
|
|
/**
|
|
* Called when DebuggerClient needs to auto-complete. Inside this function,
|
|
* one can call $client->addCompletion() with a list of strings or one of
|
|
* those DebuggerClient::AUTO_COMPLETE_ constants.
|
|
*/
|
|
public function onAutoComplete($client);
|
|
|
|
/**
|
|
* Called when DebuggerClient needs to displays help on the command. Inside
|
|
* this function, one can call $client->help() and its different forms.
|
|
*
|
|
* @return TRUE if helped, FALSE if any error
|
|
*/
|
|
public function help($client);
|
|
|
|
/**
|
|
* How to process the command on client side.
|
|
*
|
|
* @return TRUE for success, FALSE for failure
|
|
*/
|
|
public function onClient($client);
|
|
|
|
/**
|
|
* How to process the command on server side.
|
|
*
|
|
* @return TRUE for success, FALSE for failure
|
|
*/
|
|
public function onServer($proxy);
|
|
}
|
|
|
|
class Directory {
|
|
public $path;
|
|
public $handle;
|
|
|
|
public function __construct($path) {
|
|
$this->path = $path;
|
|
$this->handle = opendir($path);
|
|
}
|
|
|
|
public function read() {
|
|
return readdir($this->handle);
|
|
}
|
|
|
|
public function rewind() {
|
|
rewinddir($this->handle);
|
|
}
|
|
|
|
public function close() {
|
|
closedir($this->handle);
|
|
}
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/class.directoryiterator.php )
|
|
*
|
|
* The DirectoryIterator class provides a simple interface for viewing the
|
|
* contents of filesystem directories.
|
|
*
|
|
*/
|
|
class DirectoryIterator extends SplFileInfo implements Traversable,
|
|
SeekableIterator {
|
|
|
|
public function __construct($path) {
|
|
if (!hphp_directoryiterator___construct($this, $path)) {
|
|
throw new UnexpectedValueException(
|
|
"DirectoryIterator::__construct($path): failed to open dir");
|
|
}
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/directoryiterator.current.php )
|
|
*
|
|
* Get the current DirectoryIterator item.
|
|
*
|
|
* @return mixed The current DirectoryIterator item.
|
|
*/
|
|
public function current() {
|
|
return hphp_directoryiterator_current($this);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/directoryiterator.key.php )
|
|
*
|
|
* Get the key for the current DirectoryIterator item.
|
|
*
|
|
* @return mixed The key for the current DirectoryIterator item.
|
|
*/
|
|
public function key() {
|
|
return hphp_directoryiterator_key($this);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/directoryiterator.next.php )
|
|
*
|
|
* Move forward to the next DirectoryIterator item.
|
|
*
|
|
* @return mixed No value is returned.
|
|
*/
|
|
public function next() {
|
|
hphp_directoryiterator_next($this);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/directoryiterator.rewind.php )
|
|
*
|
|
* Rewind the DirectoryIterator back to the start.
|
|
*
|
|
* @return mixed No value is returned.
|
|
*/
|
|
public function rewind() {
|
|
hphp_directoryiterator_rewind($this);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/directoryiterator.seek.php )
|
|
*
|
|
* Seek to a given position in the DirectoryIterator.
|
|
*
|
|
* @position mixed The zero-based numeric position to seek to.
|
|
*
|
|
* @return mixed No value is returned.
|
|
*/
|
|
public function seek($position) {
|
|
hphp_directoryiterator_seek($this, $position);
|
|
}
|
|
|
|
public function __toString() {
|
|
return hphp_directoryiterator___tostring($this);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/directoryiterator.valid.php )
|
|
*
|
|
* Check whether current DirectoryIterator position is a valid file.
|
|
*
|
|
* @return mixed Returns TRUE if the position is valid, otherwise
|
|
* FALSE
|
|
*/
|
|
public function valid() {
|
|
return hphp_directoryiterator_valid($this);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/directoryiterator.isdot.php )
|
|
*
|
|
* Determines if the current DirectoryIterator item is a directory and
|
|
* either . or ...
|
|
*
|
|
* @return mixed TRUE if the entry is . or .., otherwise FALSE
|
|
*/
|
|
public function isDot() {
|
|
return hphp_directoryiterator_isdot($this);
|
|
}
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from
|
|
* http://php.net/manual/en/class.recursivedirectoryiterator.php )
|
|
*
|
|
* ...
|
|
*
|
|
*/
|
|
class RecursiveDirectoryIterator extends DirectoryIterator
|
|
implements RecursiveIterator {
|
|
|
|
const CURRENT_AS_SELF = 0x0;
|
|
const CURRENT_AS_FILEINFO = 0x00000010;
|
|
const CURRENT_AS_PATHNAME = 0x00000020;
|
|
const KEY_AS_PATHNAME = 0x0;
|
|
const KEY_AS_FILENAME = 0x00000100;
|
|
const NEW_CURRENT_AND_KEY = 0x00000110;
|
|
|
|
function __construct($path,
|
|
$flags = RecursiveDirectoryIterator::CURRENT_AS_FILEINFO) {
|
|
if (!hphp_recursivedirectoryiterator___construct($this, $path, $flags)) {
|
|
throw new UnexpectedValueException(
|
|
"RecursiveDirectoryIterator::__construct($path): failed to open dir");
|
|
}
|
|
}
|
|
|
|
function current() {
|
|
return hphp_recursivedirectoryiterator_current($this);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from
|
|
* http://php.net/manual/en/recursivedirectoryiterator.key.php )
|
|
*
|
|
*
|
|
* @return mixed The path and filename of the current dir entry.
|
|
*/
|
|
function key() {
|
|
return hphp_recursivedirectoryiterator_key($this);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from
|
|
* http://php.net/manual/en/recursivedirectoryiterator.next.php )
|
|
*
|
|
*
|
|
* @return mixed No value is returned.
|
|
*/
|
|
public function next() {
|
|
hphp_recursivedirectoryiterator_next($this);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from
|
|
* http://php.net/manual/en/recursivedirectoryiterator.rewind.php )
|
|
*
|
|
*
|
|
* @return mixed No value is returned.
|
|
*/
|
|
public function rewind() {
|
|
hphp_recursivedirectoryiterator_rewind($this);
|
|
}
|
|
|
|
public function seek($position) {
|
|
hphp_recursivedirectoryiterator_seek($this, $position);
|
|
}
|
|
|
|
public function __toString() {
|
|
return hphp_recursivedirectoryiterator___toString($this);
|
|
}
|
|
|
|
public function valid() {
|
|
return hphp_recursivedirectoryiterator_valid($this);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from
|
|
* http://php.net/manual/en/recursivedirectoryiterator.haschildren.php )
|
|
*
|
|
*
|
|
* @return mixed Returns whether the current entry is a directory,
|
|
* but not '.' or '..'
|
|
*/
|
|
function hasChildren() {
|
|
return hphp_recursivedirectoryiterator_haschildren($this);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from
|
|
* http://php.net/manual/en/recursivedirectoryiterator.getchildren.php )
|
|
*
|
|
*
|
|
* @return mixed An iterator for the current entry, if it is a
|
|
* directory.
|
|
*/
|
|
function getChildren() {
|
|
return hphp_recursivedirectoryiterator_getchildren($this);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from
|
|
* http://php.net/manual/en/recursivedirectoryiterator.getsubpath.php )
|
|
*
|
|
* Gets the sub path. WarningThis function is currently not documented;
|
|
* only its argument list is available.
|
|
*
|
|
* @return mixed The sub path (sub directory).
|
|
*/
|
|
function getSubPath() {
|
|
return hphp_recursivedirectoryiterator_getsubpath($this);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from
|
|
* http://php.net/manual/en/recursivedirectoryiterator.getsubpathname.php )
|
|
*
|
|
* Gets the sub path and filename. WarningThis function is currently not
|
|
* documented; only its argument list is available.
|
|
*
|
|
* @return mixed The sub path (sub directory) and filename.
|
|
*/
|
|
function getSubPathname() {
|
|
return hphp_recursivedirectoryiterator_getsubpathname($this);
|
|
}
|
|
}
|
|
|
|
/* vim: set expandtab tabstop=4 shiftwidth=4: */
|
|
// +----------------------------------------------------------------------+
|
|
// | Copyright (c) 2002-2004 Brent Cook |
|
|
// +----------------------------------------------------------------------+
|
|
// | This library is free software; you can redistribute it and/or |
|
|
// | modify it under the terms of the GNU Lesser General Public |
|
|
// | License as published by the Free Software Foundation; either |
|
|
// | version 2.1 of the License, or (at your option) any later version. |
|
|
// | |
|
|
// | This library is distributed in the hope that it will be useful, |
|
|
// | but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
|
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
|
|
// | Lesser General Public License for more details. |
|
|
// | |
|
|
// | You should have received a copy of the GNU Lesser General Public |
|
|
// | License along with this library; if not, write to the Free Software |
|
|
// | Foundation, Inc., 59 Temple Place, Suite 330,Boston,MA 02111-1307 USA|
|
|
// +----------------------------------------------------------------------+
|
|
// | Authors: Brent Cook <busterbcook@yahoo.com> |
|
|
// | Jason Pell <jasonpell@hotmail.com> |
|
|
// +----------------------------------------------------------------------+
|
|
//
|
|
// $Id: Lexer.php,v 1.20 2004/05/07 12:33:35 busterb Exp $
|
|
//
|
|
|
|
// {{{ token definitions
|
|
// variables: 'ident', 'sys_var'
|
|
// values: 'real_val', 'text_val', 'int_val', null
|
|
// }}}
|
|
|
|
/**
|
|
* A lexigraphical analyser inspired by the msql lexer
|
|
*
|
|
* @author Brent Cook <busterbcook@yahoo.com>
|
|
* @version 0.5
|
|
* @access public
|
|
* @package SQL_Parser
|
|
*/
|
|
class FB_MySQLLexer
|
|
{
|
|
// array of valid tokens for the lexer to recognize
|
|
// format is 'token literal'=>TOKEN_VALUE
|
|
var $symbols = array();
|
|
|
|
// {{{ instance variables
|
|
var $tokPtr = 0;
|
|
var $tokStart = 0;
|
|
var $tokLen = 0;
|
|
var $tokText = '';
|
|
var $lineNo = 0;
|
|
var $lineBegin = 0;
|
|
var $string = '';
|
|
var $stringLen = 0;
|
|
|
|
// Will not be altered by skip()
|
|
var $tokAbsStart = 0;
|
|
var $skipText = '';
|
|
|
|
// Provide lookahead capability.
|
|
var $lookahead = 0;
|
|
// Specify how many tokens to save in tokenStack, so the
|
|
// token stream can be pushed back.
|
|
var $tokenStack = array();
|
|
var $stackPtr = 0;
|
|
// }}}
|
|
|
|
// {{{ incidental functions
|
|
function __construct($string = '', $lookahead=0)
|
|
{
|
|
$this->string = $string;
|
|
$this->stringLen = strlen($string);
|
|
$this->lookahead = $lookahead;
|
|
}
|
|
|
|
function get() {
|
|
++$this->tokPtr;
|
|
++$this->tokLen;
|
|
return ($this->tokPtr <= $this->stringLen) ? $this->string{$this->tokPtr - 1} : null;
|
|
}
|
|
|
|
function unget() {
|
|
--$this->tokPtr;
|
|
--$this->tokLen;
|
|
}
|
|
|
|
function skip() {
|
|
++$this->tokStart;
|
|
return ($this->tokPtr != $this->stringLen) ? $this->string{$this->tokPtr++} : '';
|
|
}
|
|
|
|
function revert() {
|
|
$this->tokPtr = $this->tokStart;
|
|
$this->tokLen = 0;
|
|
}
|
|
|
|
function isCompop($c) {
|
|
return (($c == '<') || ($c == '>') || ($c == '=') || ($c == '!'));
|
|
}
|
|
// }}}
|
|
|
|
// {{{ pushBack()
|
|
/*
|
|
* Push back a token, so the very next call to lex() will return that token.
|
|
* Calls to this function will be ignored if there is no lookahead specified
|
|
* to the constructor, or the pushBack() function has already been called the
|
|
* maximum number of token's that can be looked ahead.
|
|
*/
|
|
function pushBack()
|
|
{
|
|
if($this->lookahead>0 && count($this->tokenStack)>0 && $this->stackPtr>0) {
|
|
$this->stackPtr--;
|
|
}
|
|
}
|
|
// }}}
|
|
|
|
// {{{ lex()
|
|
function lex()
|
|
{
|
|
if($this->lookahead>0) {
|
|
// The stackPtr, should always be the same as the count of
|
|
// elements in the tokenStack. The stackPtr, can be thought
|
|
// of as pointing to the next token to be added. If however
|
|
// a pushBack() call is made, the stackPtr, will be less than the
|
|
// count, to indicate that we should take that token from the
|
|
// stack, instead of calling nextToken for a new token.
|
|
|
|
if ($this->stackPtr<count($this->tokenStack)) {
|
|
|
|
$this->tokText = $this->tokenStack[$this->stackPtr]['tokText'];
|
|
$this->skipText = $this->tokenStack[$this->stackPtr]['skipText'];
|
|
$token = $this->tokenStack[$this->stackPtr]['token'];
|
|
|
|
// We have read the token, so now iterate again.
|
|
$this->stackPtr++;
|
|
return $token;
|
|
|
|
} else {
|
|
|
|
// If $tokenStack is full (equal to lookahead), pop the oldest
|
|
// element off, to make room for the new one.
|
|
|
|
if ($this->stackPtr == $this->lookahead) {
|
|
// For some reason array_shift and
|
|
// array_pop screw up the indexing, so we do it manually.
|
|
for($i=0; $i<(count($this->tokenStack)-1); $i++) {
|
|
$this->tokenStack[$i] = $this->tokenStack[$i+1];
|
|
}
|
|
|
|
// Indicate that we should put the element in
|
|
// at the stackPtr position.
|
|
$this->stackPtr--;
|
|
}
|
|
|
|
$token = $this->nextToken();
|
|
$this->tokenStack[$this->stackPtr] =
|
|
array('token'=>$token,
|
|
'tokText'=>$this->tokText,
|
|
'skipText'=>$this->skipText);
|
|
$this->stackPtr++;
|
|
return $token;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
return $this->nextToken();
|
|
}
|
|
}
|
|
// }}}
|
|
|
|
// {{{ nextToken()
|
|
function nextToken()
|
|
{
|
|
if ($this->string == '') return;
|
|
$state = 0;
|
|
$this->tokAbsStart = $this->tokStart;
|
|
|
|
while (true){
|
|
//echo "State: $state, Char: $c\n";
|
|
switch($state) {
|
|
// {{{ State 0 : Start of token
|
|
case 0:
|
|
$this->tokPtr = $this->tokStart;
|
|
$this->tokText = '';
|
|
$this->tokLen = 0;
|
|
$c = $this->get();
|
|
|
|
if (is_null($c)) { // End Of Input
|
|
$state = 1000;
|
|
break;
|
|
}
|
|
|
|
while (($c == ' ') || ($c == "\t")
|
|
|| ($c == "\n") || ($c == "\r")) {
|
|
if ($c == "\n" || $c == "\r") {
|
|
// Handle MAC/Unix/Windows line endings.
|
|
if($c == "\r") {
|
|
$c = $this->skip();
|
|
|
|
// If not DOS newline
|
|
if($c != "\n")
|
|
$this->unget();
|
|
}
|
|
++$this->lineNo;
|
|
$this->lineBegin = $this->tokPtr;
|
|
}
|
|
|
|
$c = $this->skip();
|
|
$this->tokLen = 1;
|
|
}
|
|
|
|
// Escape quotes and backslashes
|
|
if ($c == '\\') {
|
|
$t = $this->get();
|
|
if ($t == '\'' || $t == '\\' || $t == '"') {
|
|
$this->tokText = $t;
|
|
$this->tokStart = $this->tokPtr;
|
|
return $this->tokText;
|
|
} else {
|
|
$this->unget();
|
|
|
|
// Unknown token. Revert to single char
|
|
$state = 999;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (($c == '\'') || ($c == '"')) { // text string
|
|
$quote = $c;
|
|
$state = 12;
|
|
break;
|
|
}
|
|
|
|
if ($c == '_') { // system variable
|
|
$state = 18;
|
|
break;
|
|
}
|
|
|
|
if ($c == '`') { // escaped ident
|
|
$state = 20;
|
|
break;
|
|
}
|
|
|
|
if (ctype_alpha($c)) { // keyword or ident
|
|
$state = 1;
|
|
break;
|
|
}
|
|
|
|
if (ctype_digit($c)) { // real or int number
|
|
$state = 5;
|
|
break;
|
|
}
|
|
|
|
if ($c == '.') {
|
|
$t = $this->get();
|
|
if ($t == '.') { // ellipsis
|
|
if ($this->get() == '.') {
|
|
$this->tokText = '...';
|
|
$this->tokStart = $this->tokPtr;
|
|
return $this->tokText;
|
|
} else {
|
|
$state = 999;
|
|
break;
|
|
}
|
|
} else if (ctype_digit($t)) { // real number
|
|
$this->unget();
|
|
$state = 7;
|
|
break;
|
|
} else { // period
|
|
$this->unget();
|
|
}
|
|
}
|
|
|
|
if ($c == '#') { // Comments
|
|
$state = 14;
|
|
break;
|
|
}
|
|
if ($c == '-') {
|
|
$t = $this->get();
|
|
if ($t == '-') {
|
|
$state = 14;
|
|
break;
|
|
} else {
|
|
// negative number ... or - used as an operator
|
|
$state = 999;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if ($this->isCompop($c)) { // comparison operator
|
|
$state = 10;
|
|
break;
|
|
}
|
|
// Unknown token. Revert to single char
|
|
$state = 999;
|
|
break;
|
|
// }}}
|
|
|
|
// {{{ State 1 : Incomplete keyword or ident
|
|
case 1:
|
|
$c = $this->get();
|
|
if (ctype_alnum($c) || ($c == '_')) {
|
|
$state = 1;
|
|
break;
|
|
}
|
|
$state = 2;
|
|
break;
|
|
// }}}
|
|
|
|
// {{{ State 20 : Incomplete keyword or ident
|
|
case 20:
|
|
do {
|
|
$c = $this->get();
|
|
} while ('`' != $c);
|
|
|
|
$c = $this->get();
|
|
$state = 2;
|
|
break;
|
|
// }}}
|
|
|
|
/* {{{ State 2 : Complete keyword or ident */
|
|
case 2:
|
|
$this->unget();
|
|
$this->tokText = substr($this->string, $this->tokStart,
|
|
$this->tokLen);
|
|
|
|
$testToken = strtolower($this->tokText);
|
|
if (isset($this->symbols[$testToken])) {
|
|
|
|
$this->skipText = substr($this->string, $this->tokAbsStart,
|
|
$this->tokStart-$this->tokAbsStart);
|
|
$this->tokStart = $this->tokPtr;
|
|
return $testToken;
|
|
} else {
|
|
$this->skipText = substr($this->string, $this->tokAbsStart,
|
|
$this->tokStart-$this->tokAbsStart);
|
|
$this->tokStart = $this->tokPtr;
|
|
$this->tokText = trim($this->tokText, '`');
|
|
return 'ident';
|
|
}
|
|
break;
|
|
// }}}
|
|
|
|
// {{{ State 5: Incomplete real or int number
|
|
case 5:
|
|
$c = $this->get();
|
|
if (ctype_digit($c)) {
|
|
$state = 5;
|
|
break;
|
|
} else if ($c == '.') {
|
|
$t = $this->get();
|
|
if ($t == '.') { // ellipsis
|
|
$this->unget();
|
|
} else { // real number
|
|
$state = 7;
|
|
break;
|
|
}
|
|
} else if(ctype_alpha($c)) { // number must end with non-alpha character
|
|
$state = 999;
|
|
break;
|
|
} else {
|
|
// complete number
|
|
$state = 6;
|
|
break;
|
|
}
|
|
// }}}
|
|
|
|
// {{{ State 6: Complete integer number
|
|
case 6:
|
|
$this->unget();
|
|
$this->tokText = intval(substr($this->string, $this->tokStart,
|
|
$this->tokLen));
|
|
$this->skipText = substr($this->string, $this->tokAbsStart,
|
|
$this->tokStart-$this->tokAbsStart);
|
|
$this->tokStart = $this->tokPtr;
|
|
return 'int_val';
|
|
break;
|
|
// }}}
|
|
|
|
// {{{ State 7: Incomplete real number
|
|
case 7:
|
|
$c = $this->get();
|
|
|
|
/* Analogy Start */
|
|
if ($c == 'e' || $c == 'E') {
|
|
$state = 15;
|
|
break;
|
|
}
|
|
/* Analogy End */
|
|
|
|
if (ctype_digit($c)) {
|
|
$state = 7;
|
|
break;
|
|
}
|
|
$state = 8;
|
|
break;
|
|
// }}}
|
|
|
|
// {{{ State 8: Complete real number */
|
|
case 8:
|
|
$this->unget();
|
|
$this->tokText = floatval(substr($this->string, $this->tokStart,
|
|
$this->tokLen));
|
|
$this->skipText = substr($this->string, $this->tokAbsStart,
|
|
$this->tokStart-$this->tokAbsStart);
|
|
$this->tokStart = $this->tokPtr;
|
|
return 'real_val';
|
|
// }}}
|
|
|
|
// {{{ State 10: Incomplete comparison operator
|
|
case 10:
|
|
$c = $this->get();
|
|
if ($this->isCompop($c))
|
|
{
|
|
$state = 10;
|
|
break;
|
|
}
|
|
$state = 11;
|
|
break;
|
|
// }}}
|
|
|
|
// {{{ State 11: Complete comparison operator
|
|
case 11:
|
|
$this->unget();
|
|
$this->tokText = substr($this->string, $this->tokStart,
|
|
$this->tokLen);
|
|
if($this->tokText) {
|
|
$this->skipText = substr($this->string, $this->tokAbsStart,
|
|
$this->tokStart-$this->tokAbsStart);
|
|
$this->tokStart = $this->tokPtr;
|
|
return $this->tokText;
|
|
}
|
|
$state = 999;
|
|
break;
|
|
// }}}
|
|
|
|
// {{{ State 12: Incomplete text string
|
|
case 12:
|
|
$bail = false;
|
|
$text = '';
|
|
while (!$bail) {
|
|
$c = $this->get();
|
|
switch ($c) {
|
|
case '':
|
|
$this->tokText = null;
|
|
$bail = true;
|
|
break;
|
|
case "\\":
|
|
$c = $this->get();
|
|
switch ($c) {
|
|
// undo mysql_escape_string
|
|
case '0':
|
|
$text .= "\0";
|
|
break;
|
|
case 'r':
|
|
$text .= "\r";
|
|
break;
|
|
case 'n':
|
|
$text .= "\n";
|
|
break;
|
|
case 'Z':
|
|
$text .= "\x1a";
|
|
break;
|
|
default:
|
|
if (!$c) {
|
|
$this->tokText = null;
|
|
$bail = true;
|
|
} else {
|
|
$text .= $c;
|
|
}
|
|
}
|
|
break;
|
|
case $quote:
|
|
$this->tokText = $text;
|
|
$bail = true;
|
|
break;
|
|
default:
|
|
$text .= $c;
|
|
break;
|
|
}
|
|
}
|
|
if (!is_null($this->tokText)) {
|
|
$state = 13;
|
|
break;
|
|
}
|
|
$state = 999;
|
|
break;
|
|
// }}}
|
|
|
|
// {{{ State 13: Complete text string
|
|
case 13:
|
|
$this->skipText = substr($this->string, $this->tokAbsStart,
|
|
$this->tokStart-$this->tokAbsStart);
|
|
$this->tokStart = $this->tokPtr;
|
|
return 'text_val';
|
|
break;
|
|
// }}}
|
|
|
|
// {{{ State 14: Comment
|
|
case 14:
|
|
$c = $this->skip();
|
|
if ($c == "\n" || $c == "\r" || $c == "") {
|
|
// Handle MAC/Unix/Windows line endings.
|
|
if ($c == "\r") {
|
|
$c = $this->skip();
|
|
// If not DOS newline
|
|
if ($c != "\n") {
|
|
$this->unget();
|
|
}
|
|
}
|
|
|
|
if ($c != "") {
|
|
++$this->lineNo;
|
|
$this->lineBegin = $this->tokPtr;
|
|
}
|
|
|
|
// We need to skip all the text.
|
|
$this->tokStart = $this->tokPtr;
|
|
$state = 0;
|
|
} else {
|
|
$state = 14;
|
|
}
|
|
break;
|
|
// }}}
|
|
|
|
// {{{ State 15: Exponent Sign in Scientific Notation
|
|
case 15:
|
|
$c = $this->get();
|
|
if($c == '-' || $c == '+') {
|
|
$state = 16;
|
|
break;
|
|
}
|
|
$state = 999;
|
|
break;
|
|
// }}}
|
|
|
|
// {{{ state 16: Exponent Value-first digit in Scientific Notation
|
|
case 16:
|
|
$c = $this->get();
|
|
if (ctype_digit($c)) {
|
|
$state = 17;
|
|
break;
|
|
}
|
|
$state = 999; // if no digit, then token is unknown
|
|
break;
|
|
// }}}
|
|
|
|
// {{{ State 17: Exponent Value in Scientific Notation
|
|
case 17:
|
|
$c = $this->get();
|
|
if (ctype_digit($c)) {
|
|
$state = 17;
|
|
break;
|
|
}
|
|
$state = 8; // At least 1 exponent digit was required
|
|
break;
|
|
// }}}
|
|
|
|
// {{{ State 18 : Incomplete System Variable
|
|
case 18:
|
|
$c = $this->get();
|
|
if (ctype_alnum($c) || $c == '_') {
|
|
$state = 18;
|
|
break;
|
|
}
|
|
$state = 19;
|
|
break;
|
|
// }}}
|
|
|
|
// {{{ State 19: Complete Sys Var
|
|
case 19:
|
|
$this->unget();
|
|
$this->tokText = substr($this->string, $this->tokStart,
|
|
$this->tokLen);
|
|
$this->skipText = substr($this->string, $this->tokAbsStart,
|
|
$this->tokStart-$this->tokAbsStart);
|
|
$this->tokStart = $this->tokPtr;
|
|
return 'sys_var';
|
|
// }}}
|
|
|
|
// {{{ State 999 : Unknown token. Revert to single char
|
|
case 999:
|
|
$this->revert();
|
|
$this->tokText = $this->get();
|
|
$this->skipText = substr($this->string, $this->tokAbsStart,
|
|
$this->tokStart-$this->tokAbsStart);
|
|
$this->tokStart = $this->tokPtr;
|
|
return $this->tokText;
|
|
// }}}
|
|
|
|
// {{{ State 1000 : End Of Input
|
|
case 1000:
|
|
$this->tokText = '*end of input*';
|
|
$this->skipText = substr($this->string, $this->tokAbsStart,
|
|
$this->tokStart-$this->tokAbsStart);
|
|
$this->tokStart = $this->tokPtr;
|
|
return null;
|
|
// }}}
|
|
}
|
|
}
|
|
}
|
|
// }}}
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// helpers
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/class.reflector.php )
|
|
*
|
|
* Reflector is an interface implemented by all exportable Reflection
|
|
* classes.
|
|
*
|
|
*/
|
|
interface Reflector {
|
|
public function __toString();
|
|
}
|
|
|
|
class ReflectionException extends Exception {
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// parameter
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/class.reflectionparameter.php )
|
|
*
|
|
* The ReflectionParameter class retrieves information about a function's
|
|
* or method's parameters.
|
|
*
|
|
* To introspect function parameters, first create an instance of the
|
|
* ReflectionFunction or ReflectionMethod classes and then use their
|
|
* ReflectionFunctionAbstract::getParameters() method to retrieve an array
|
|
* of parameters.
|
|
*
|
|
*/
|
|
class ReflectionParameter implements Reflector {
|
|
public $info;
|
|
|
|
public function __construct($func, $param) {
|
|
if ($func && $param) {
|
|
$params = $func->getParameters();
|
|
$this->info = $params[$param]->info;
|
|
}
|
|
}
|
|
|
|
public function __toString() {
|
|
// TODO
|
|
return "";
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/reflectionparameter.export.php )
|
|
*
|
|
* Exports. WarningThis function is currently not documented; only its
|
|
* argument list is available.
|
|
*
|
|
* @func mixed The function name.
|
|
* @param mixed The parameter name.
|
|
* @ret mixed Setting to TRUE will return the export, as opposed
|
|
* to emitting it. Setting to FALSE (the default) will
|
|
* do the opposite.
|
|
*
|
|
* @return mixed The exported reflection.
|
|
*/
|
|
public static function export($func, $param, $ret=false) {
|
|
$obj = new ReflectionParameter($func, $param);
|
|
$str = (string)$obj;
|
|
if ($ret) {
|
|
return $str;
|
|
}
|
|
print $str;
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/reflectionparameter.getname.php
|
|
* )
|
|
*
|
|
* Gets the name of the parameter.
|
|
*
|
|
* @return mixed The name of the reflected parameter.
|
|
*/
|
|
public function getName() {
|
|
return $this->info['name'];
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from
|
|
* http://php.net/manual/en/reflectionparameter.ispassedbyreference.php )
|
|
*
|
|
* Checks if the parameter is passed in by reference. WarningThis function
|
|
* is currently not documented; only its argument list is available.
|
|
*
|
|
* @return mixed TRUE if the parameter is passed in by reference,
|
|
* otherwise FALSE
|
|
*/
|
|
public function isPassedByReference() {
|
|
return isset($this->info['ref']);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from
|
|
* http://php.net/manual/en/reflectionparameter.getdeclaringclass.php )
|
|
*
|
|
* Gets the declaring class. WarningThis function is currently not
|
|
* documented; only its argument list is available.
|
|
*
|
|
* @return mixed A ReflectionClass object.
|
|
*/
|
|
public function getDeclaringClass() {
|
|
if (empty($this->info['class'])) {
|
|
return null;
|
|
}
|
|
return new ReflectionClass($this->info['class']);
|
|
}
|
|
|
|
public function getDeclaringFunction() {
|
|
if (empty($this->info['class'])) {
|
|
return new ReflectionFunction($this->info['function']);
|
|
}
|
|
return new ReflectionMethod($this->info['class'], $this->info['function']);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/reflectionparameter.getclass.php
|
|
* )
|
|
*
|
|
* Gets a class. WarningThis function is currently not documented; only
|
|
* its argument list is available.
|
|
*
|
|
* @return mixed A ReflectionClass object.
|
|
*/
|
|
public function getClass() {
|
|
if (empty($this->info['type'])) {
|
|
return null;
|
|
}
|
|
$ltype = strtolower($this->info['type']);
|
|
if (hphp_scalar_typehints_enabled()) {
|
|
$nonClassTypehints = array(
|
|
'bool' => 1,
|
|
'boolean' => 1,
|
|
'int' => 1,
|
|
'integer' => 1,
|
|
'real' => 1,
|
|
'double' => 1,
|
|
'float' => 1,
|
|
'string' => 1,
|
|
'array' => 1
|
|
);
|
|
if (isset($nonClassTypehints[$ltype])) {
|
|
return null;
|
|
}
|
|
} else if ($ltype === 'array') {
|
|
return null;
|
|
}
|
|
return new ReflectionClass($this->info['type']);
|
|
}
|
|
|
|
public function getTypehintText() {
|
|
if (isset($this->info['type'])) {
|
|
return $this->info['type'];
|
|
}
|
|
return '';
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/reflectionparameter.isarray.php
|
|
* )
|
|
*
|
|
* Checks if the parameter expects an array.
|
|
*
|
|
* @return mixed TRUE if an array is expected, FALSE otherwise.
|
|
*/
|
|
public function isArray() {
|
|
return $this->info['type'] == 'array';
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from
|
|
* http://php.net/manual/en/reflectionparameter.allowsnull.php )
|
|
*
|
|
* Checks whether the parameter allows NULL. WarningThis function is
|
|
* currently not documented; only its argument list is available.
|
|
*
|
|
* @return mixed TRUE if NULL is allowed, otherwise FALSE
|
|
*/
|
|
public function allowsNull() {
|
|
return isset($this->info['nullable']);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from
|
|
* http://php.net/manual/en/reflectionparameter.isoptional.php )
|
|
*
|
|
* Checks if the parameter is optional.
|
|
*
|
|
* @return mixed TRUE if the parameter is optional, otherwise FALSE
|
|
*/
|
|
public function isOptional() {
|
|
return array_key_exists('default', $this->info);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from
|
|
* http://php.net/manual/en/reflectionparameter.isdefaultvalueavailable.php
|
|
* )
|
|
*
|
|
* Checks if a default value for the parameter is available.
|
|
*
|
|
* @return mixed TRUE if a default value is available, otherwise
|
|
* FALSE
|
|
*/
|
|
public function isDefaultValueAvailable() {
|
|
return array_key_exists('default', $this->info);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from
|
|
* http://php.net/manual/en/reflectionparameter.getdefaultvalue.php )
|
|
*
|
|
* Gets the default value of the parameter for a user-defined function or
|
|
* method. If the parameter is not optional a ReflectionException will be
|
|
* thrown.
|
|
*
|
|
* @return mixed The parameters default value.
|
|
*/
|
|
public function getDefaultValue() {
|
|
if (!$this->isOptional()) {
|
|
throw new ReflectionException('Parameter is not optional');
|
|
}
|
|
$defaultValue = $this->info['default'];
|
|
if ($defaultValue instanceof stdclass) {
|
|
if (isset($defaultValue->class)) {
|
|
return hphp_get_class_constant($defaultValue->class,
|
|
$defaultValue->name);
|
|
}
|
|
hphp_throw_fatal_error($defaultValue->msg);
|
|
}
|
|
return $defaultValue;
|
|
}
|
|
|
|
public function getDefaultValueText() {
|
|
if (isset($this->info['defaultText'])) {
|
|
return $this->info['defaultText'];
|
|
}
|
|
return '';
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from
|
|
* http://php.net/manual/en/reflectionparameter.getposition.php )
|
|
*
|
|
* Gets the position of the parameter.
|
|
*
|
|
* @return mixed The position of the parameter, left to right,
|
|
* starting at position #0.
|
|
*/
|
|
public function getPosition() {
|
|
return $this->info['index'];
|
|
}
|
|
|
|
public function getAttribute($name) {
|
|
$attrs = $this->info['attributes'];
|
|
return isset($attrs[$name]) ? $attrs[$name] : null;
|
|
}
|
|
|
|
public function getAttributes() {
|
|
return $this->info['attributes'];
|
|
}
|
|
|
|
public function getAttributeRecursive($name) {
|
|
$attrs = $this->getAttributesRecursive();
|
|
return isset($attrs[$name]) ? $attrs[$name] : null;
|
|
}
|
|
|
|
public function getAttributesRecursive() {
|
|
if (!isset($this->info['class'])) {
|
|
return $this->getAttributes();
|
|
}
|
|
|
|
$attrs = array();
|
|
$class = $this->getDeclaringClass();
|
|
$function_name = $this->info['function'];
|
|
$index = $this->info['index'];
|
|
self::collectAttributes(&$attrs, $class, $function_name, $index);
|
|
return $attrs;
|
|
}
|
|
|
|
private static function collectAttributes(&$attrs, $class, $function_name,
|
|
$index) {
|
|
if ($class->hasMethod($function_name)) {
|
|
$method = $class->getMethod($function_name);
|
|
$params = $method->getParameters();
|
|
if (count($params) >= $index) {
|
|
$attrs += $params[$index]->getAttributes();
|
|
}
|
|
}
|
|
|
|
$parent = $class->getParentClass();
|
|
if ($parent) {
|
|
self::collectAttributes(
|
|
&$attrs,
|
|
$parent,
|
|
$function_name,
|
|
$index);
|
|
}
|
|
}
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from
|
|
* http://php.net/manual/en/class.reflectionfunctionabstract.php )
|
|
*
|
|
* A parent class to ReflectionFunction, read its description for details.
|
|
*
|
|
*/
|
|
class ReflectionFunctionAbstract {
|
|
public $info;
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from
|
|
* http://php.net/manual/en/reflectionfunctionabstract.getname.php )
|
|
*
|
|
* Get the name of the function. WarningThis function is currently not
|
|
* documented; only its argument list is available.
|
|
*
|
|
* @return mixed The name of the function.
|
|
*/
|
|
public function getName() {
|
|
return $this->info['name'];
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from
|
|
* http://php.net/manual/en/reflectionfunctionabstract.isinternal.php )
|
|
*
|
|
* Checks whether the function is internal, as opposed to user-defined.
|
|
* WarningThis function is currently not documented; only its argument list
|
|
* is available.
|
|
*
|
|
* @return mixed TRUE if it's internal, otherwise FALSE
|
|
*/
|
|
public function isInternal() {
|
|
return isset($this->info['internal']);
|
|
}
|
|
|
|
public function getClosure() {
|
|
return $this->info['closure'];
|
|
}
|
|
|
|
public function isClosure() {
|
|
return !empty($this->info['is_closure']);
|
|
}
|
|
|
|
public function isGenerator() {
|
|
return !empty($this->info['is_generator']);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from
|
|
* http://php.net/manual/en/reflectionfunctionabstract.isuserdefined.php )
|
|
*
|
|
* Checks whether the function is user-defined, as opposed to internal.
|
|
* WarningThis function is currently not documented; only its argument list
|
|
* is available.
|
|
*
|
|
* @return mixed TRUE if it's user-defined, otherwise false;
|
|
*/
|
|
public function isUserDefined() {
|
|
return !isset($this->info['internal']);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from
|
|
* http://php.net/manual/en/reflectionfunctionabstract.getfilename.php )
|
|
*
|
|
* Gets the file name from a user-defined function. WarningThis function
|
|
* is currently not documented; only its argument list is available.
|
|
*
|
|
* @return mixed The file name.
|
|
*/
|
|
public function getFileName() {
|
|
return $this->info['file'];
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from
|
|
* http://php.net/manual/en/reflectionfunctionabstract.getstartline.php )
|
|
*
|
|
* Gets the starting line number of the function. WarningThis function is
|
|
* currently not documented; only its argument list is available.
|
|
*
|
|
* @return mixed The starting line number.
|
|
*/
|
|
public function getStartLine() {
|
|
return $this->info['line1'];
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from
|
|
* http://php.net/manual/en/reflectionfunctionabstract.getendline.php )
|
|
*
|
|
* Get the ending line number. WarningThis function is currently not
|
|
* documented; only its argument list is available.
|
|
*
|
|
* @return mixed The ending line number of the user defined class, or
|
|
* FALSE if unknown.
|
|
*/
|
|
public function getEndLine() {
|
|
return $this->info['line2'];
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from
|
|
* http://php.net/manual/en/reflectionfunctionabstract.getdoccomment.php )
|
|
*
|
|
* Get a Doc comment from a function. WarningThis function is currently
|
|
* not documented; only its argument list is available.
|
|
*
|
|
* @return mixed The doc comment if it exists, otherwise FALSE
|
|
*/
|
|
public function getDocComment() {
|
|
return $this->info['doc'];
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from
|
|
* http://php.net/manual/en/reflectionfunctionabstract.getstaticvariables.php
|
|
* )
|
|
*
|
|
* Get the static variables. WarningThis function is currently not
|
|
* documented; only its argument list is available.
|
|
*
|
|
* @return mixed An array of static variables.
|
|
*/
|
|
public function getStaticVariables() {
|
|
return $this->info['static_variables'];
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from
|
|
* http://php.net/manual/en/reflectionfunctionabstract.returnsreference.php
|
|
* )
|
|
*
|
|
* Checks whether the function returns a reference. WarningThis function
|
|
* is currently not documented; only its argument list is available.
|
|
*
|
|
* @return mixed TRUE if it returns a reference, otherwise FALSE
|
|
*/
|
|
public function returnsReference() {
|
|
return isset($this->info['ref']);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from
|
|
* http://php.net/manual/en/reflectionfunctionabstract.getparameters.php )
|
|
*
|
|
* Get the parameters as an array of ReflectionParameter. WarningThis
|
|
* function is currently not documented; only its argument list is
|
|
* available.
|
|
*
|
|
* @return mixed The parameters, as a ReflectionParameter object.
|
|
*/
|
|
public function getParameters() {
|
|
$ret = array();
|
|
foreach ($this->info['params'] as $name => $info) {
|
|
$param = new ReflectionParameter(null, null);
|
|
$param->info = $info;
|
|
$ret[] = $param;
|
|
}
|
|
return $ret;
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from
|
|
* http://php.net/manual/en/reflectionfunctionabstract.getnumberofparameters.php
|
|
* )
|
|
*
|
|
* Get the number of parameters that a function defines, both optional and
|
|
* required. WarningThis function is currently not documented; only its
|
|
* argument list is available.
|
|
*
|
|
* @return mixed The number of parameters.
|
|
*/
|
|
public function getNumberOfParameters() {
|
|
return count($this->info['params']);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from
|
|
* http://php.net/manual/en/reflectionfunctionabstract.getnumberofrequiredparameters.php
|
|
* )
|
|
*
|
|
* Get the number of required parameters that a function defines.
|
|
* WarningThis function is currently not documented; only its argument list
|
|
* is available.
|
|
*
|
|
* @return mixed The number of required parameters.
|
|
*/
|
|
public function getNumberOfRequiredParameters() {
|
|
$count = 0;
|
|
$params = $this->getParameters();
|
|
foreach ($params as $name => $param) {
|
|
if ($param->isOptional()) {
|
|
break;
|
|
}
|
|
$count++;
|
|
}
|
|
return $count;
|
|
}
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// function
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/class.reflectionfunction.php )
|
|
*
|
|
* The ReflectionFunction class reports information about a function.
|
|
*
|
|
* Parent class ReflectionFunctionAbstract has the same methods except
|
|
* invoke(), invokeArgs(), export() and isDisabled().
|
|
*
|
|
*/
|
|
class ReflectionFunction extends ReflectionFunctionAbstract
|
|
implements Reflector {
|
|
const IS_DEPRECATED = 262144;
|
|
|
|
public function __construct($name) {
|
|
if ($name instanceof Closure) {
|
|
$this->info = hphp_get_closure_info($name);
|
|
} else {
|
|
$this->info = hphp_get_function_info($name);
|
|
if (empty($this->info)) {
|
|
throw new ReflectionException("Function $name does not exist");
|
|
}
|
|
}
|
|
}
|
|
|
|
public function __toString() {
|
|
//TODO
|
|
return "";
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/reflectionfunction.export.php )
|
|
*
|
|
* Exports a Reflected function. WarningThis function is currently not
|
|
* documented; only its argument list is available.
|
|
*
|
|
* @name mixed The reflection to export.
|
|
* @ret mixed Setting to TRUE will return the export, as opposed
|
|
* to emitting it. Setting to FALSE (the default) will
|
|
* do the opposite.
|
|
*
|
|
* @return mixed If the return parameter is set to TRUE, then the
|
|
* export is returned as a string, otherwise NULL is
|
|
* returned.
|
|
*/
|
|
public static function export($name, $ret=false) {
|
|
$obj = new ReflectionFunction($name);
|
|
$str = (string)$obj;
|
|
if ($ret) {
|
|
return $str;
|
|
}
|
|
print $str;
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/reflectionfunction.invoke.php )
|
|
*
|
|
* Invokes a reflected function.
|
|
*
|
|
*/
|
|
public function invoke() {
|
|
$args = func_get_args();
|
|
if (isset($this->info['closureobj'])) {
|
|
$closure = $this->info['closureobj'];
|
|
return hphp_invoke_method($closure, get_class($closure),
|
|
'__invoke', $args);
|
|
}
|
|
return hphp_invoke($this->info['name'], $args);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from
|
|
* http://php.net/manual/en/reflectionfunction.invokeargs.php )
|
|
*
|
|
* Invokes args. WarningThis function is currently not documented; only
|
|
* its argument list is available.
|
|
*
|
|
* @args mixed The args to invoke.
|
|
*/
|
|
public function invokeArgs($args) {
|
|
if (isset($this->info['closureobj'])) {
|
|
$closure = $this->info['closureobj'];
|
|
return hphp_invoke_method($closure, get_class($closure),
|
|
'__invoke', array_values($args));
|
|
}
|
|
return hphp_invoke($this->info['name'], array_values($args));
|
|
}
|
|
|
|
public function getAttribute($name) {
|
|
$attrs = $this->info['attributes'];
|
|
return isset($attrs[$name]) ? $attrs[$name] : null;
|
|
}
|
|
|
|
public function getAttributes() {
|
|
return $this->info['attributes'];
|
|
}
|
|
|
|
public function getAttributeRecursive($name) {
|
|
$attrs = $this->info['attributes'];
|
|
return isset($attrs[$name]) ? $attrs[$name] : null;
|
|
}
|
|
|
|
public function getAttributesRecursive() {
|
|
return $this->info['attributes'];
|
|
}
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// class
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/class.reflectionclass.php )
|
|
*
|
|
* The ReflectionClass class reports information about a class.
|
|
*
|
|
*/
|
|
class ReflectionClass implements Reflector {
|
|
const IS_IMPLICIT_ABSTRACT = 16 ;
|
|
const IS_EXPLICIT_ABSTRACT = 32 ;
|
|
const IS_FINAL = 64 ;
|
|
|
|
public $name;
|
|
private $info = null;
|
|
private static $fetched = array();
|
|
|
|
public function __construct($name) {
|
|
if (is_object($name)) {
|
|
$name = get_class($name);
|
|
}
|
|
|
|
$this->name = hphp_get_original_class_name($name);
|
|
if (empty($this->name)) {
|
|
throw new ReflectionException("Class $name does not exist");
|
|
}
|
|
}
|
|
|
|
private function fetch($what) {
|
|
if (!$this->info) {
|
|
$this->info = self::fetch_recur($this->name);
|
|
$this->info['properties'] += $this->info['private_properties'];
|
|
}
|
|
return $this->info[$what];
|
|
}
|
|
|
|
private static function fetch_recur($name) {
|
|
if (isset(self::$fetched[$name])) return self::$fetched[$name];
|
|
$info = hphp_get_class_info($name);
|
|
if (empty($info)) {
|
|
throw new ReflectionException("Class $name does not exist");
|
|
}
|
|
|
|
$info['attributes_rec'] = $info['attributes'];
|
|
|
|
$abstract = isset($info['abstract']) || isset($info['interface']);
|
|
// flattening the trees, so it's easier for lookups
|
|
foreach ($info['interfaces'] as $interface => $_) {
|
|
$p = self::fetch_recur($interface);
|
|
if ($abstract) $info['methods'] += $p['methods'];
|
|
$info['constants'] += $p['constants'];
|
|
$info['interfaces'] += $p['interfaces'];
|
|
}
|
|
|
|
$parent = $info['parent'];
|
|
if (!empty($parent)) {
|
|
$p = self::fetch_recur($parent);
|
|
if (isset($p['interface'])) {
|
|
$info['interfaces'][$parent] = 1;
|
|
} else {
|
|
$info['properties'] += $p['properties'];
|
|
}
|
|
$info['methods'] += $p['methods'];
|
|
$info['constants'] += $p['constants'];
|
|
$info['interfaces'] += $p['interfaces'];
|
|
$info['attributes_rec'] += $p['attributes_rec'];
|
|
}
|
|
self::$fetched[$name] = $info;
|
|
return $info;
|
|
}
|
|
|
|
private function check($what) {
|
|
if (!$this->info) {
|
|
$this->info = self::fetch_recur($this->name);
|
|
}
|
|
return isset($this->info[$what]);
|
|
}
|
|
|
|
private function test($what, $name) {
|
|
$v = $this->fetch($what);
|
|
return $v && isset($v[$name]);
|
|
}
|
|
|
|
public function __toString() {
|
|
return "";
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/reflectionclass.export.php )
|
|
*
|
|
* Exports a reflected class. WarningThis function is currently not
|
|
* documented; only its argument list is available.
|
|
*
|
|
* @name mixed The reflection to export.
|
|
* @ret mixed Setting to TRUE will return the export, as opposed
|
|
* to emitting it. Setting to FALSE (the default) will
|
|
* do the opposite.
|
|
*
|
|
* @return mixed If the return parameter is set to TRUE, then the
|
|
* export is returned as a string, otherwise NULL is
|
|
* returned.
|
|
*/
|
|
public static function export($name, $ret=false) {
|
|
$obj = new ReflectionClass($name);
|
|
$str = (string)$obj;
|
|
if ($ret) {
|
|
return $str;
|
|
}
|
|
print $str;
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/reflectionclass.getname.php )
|
|
*
|
|
* Gets the class name. WarningThis function is currently not documented;
|
|
* only its argument list is available.
|
|
*
|
|
* @return mixed The class name.
|
|
*/
|
|
public function getName() {
|
|
return $this->name;
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/reflectionclass.isinternal.php )
|
|
*
|
|
* Checks whether the class is internal, as opposed to user-defined.
|
|
* WarningThis function is currently not documented; only its argument list
|
|
* is available.
|
|
*
|
|
* @return mixed Returns TRUE on success or FALSE on failure.
|
|
*/
|
|
public function isInternal() {
|
|
return $this->check('internal');
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from
|
|
* http://php.net/manual/en/reflectionclass.isuserdefined.php )
|
|
*
|
|
* Checks whether the class is user-defined, as opposed to internal.
|
|
*
|
|
* @return mixed Returns TRUE on success or FALSE on failure.
|
|
*/
|
|
public function isUserDefined() {
|
|
return !$this->check('internal');
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from
|
|
* http://php.net/manual/en/reflectionclass.isinstantiable.php )
|
|
*
|
|
* Checks if the class is instanciable. WarningThis function is currently
|
|
* not documented; only its argument list is available.
|
|
*
|
|
* @return mixed Returns TRUE on success or FALSE on failure.
|
|
*/
|
|
public function isInstantiable() {
|
|
return !$this->check('abstract');
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/reflectionclass.hasconstant.php
|
|
* )
|
|
*
|
|
* Checks whether the class has a specific constant defined or not.
|
|
*
|
|
* @name mixed The name of the constant being checked for.
|
|
*
|
|
* @return mixed TRUE if the constant is defined, otherwise FALSE.
|
|
*/
|
|
public function hasConstant($name) {
|
|
return $this->test('constants', $name);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/reflectionclass.hasmethod.php )
|
|
*
|
|
* Checks whether a specific method is defined in a class.
|
|
*
|
|
* @name mixed Name of the method being checked for.
|
|
*
|
|
* @return mixed TRUE if it has the method, otherwise FALSE
|
|
*/
|
|
public function hasMethod($name) {
|
|
return $this->test('methods', strtolower($name));
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/reflectionclass.hasproperty.php
|
|
* )
|
|
*
|
|
* Checks whether the specified property is defined.
|
|
*
|
|
* @name mixed Name of the property being checked for.
|
|
*
|
|
* @return mixed TRUE if it has the property, otherwise FALSE
|
|
*/
|
|
public function hasProperty($name) {
|
|
return $this->test('properties', $name);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/reflectionclass.getfilename.php
|
|
* )
|
|
*
|
|
* Gets the filename of the file in which the class has been defined.
|
|
*
|
|
* @return mixed Returns the filename of the file in which the class
|
|
* has been defined. If the class is defined in the PHP
|
|
* core or in a PHP extension, FALSE is returned.
|
|
*/
|
|
public function getFileName() {
|
|
return $this->fetch('file');
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/reflectionclass.getstartline.php
|
|
* )
|
|
*
|
|
* Get the starting line number. WarningThis function is currently not
|
|
* documented; only its argument list is available.
|
|
*
|
|
* @return mixed The starting line number, as an integer.
|
|
*/
|
|
public function getStartLine() {
|
|
return $this->fetch('line1');
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/reflectionclass.getendline.php )
|
|
*
|
|
* Gets end line number from a user-defined class definition.
|
|
*
|
|
* @return mixed The ending line number of the user defined class, or
|
|
* FALSE if unknown.
|
|
*/
|
|
public function getEndLine() {
|
|
return $this->fetch('line2');
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from
|
|
* http://php.net/manual/en/reflectionclass.getdoccomment.php )
|
|
*
|
|
* Gets doc comments from a class. WarningThis function is currently not
|
|
* documented; only its argument list is available.
|
|
*
|
|
* @return mixed The doc comment if it exists, otherwise FALSE
|
|
*/
|
|
public function getDocComment() {
|
|
return $this->fetch('doc');
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from
|
|
* http://php.net/manual/en/reflectionclass.getconstructor.php )
|
|
*
|
|
* Gets the constructor from a class. WarningThis function is currently
|
|
* not documented; only its argument list is available.
|
|
*
|
|
* @return mixed A ReflectionMethod object.
|
|
*/
|
|
public function getConstructor() {
|
|
if ($this->hasMethod('__construct')) {
|
|
return $this->getMethod('__construct');
|
|
}
|
|
if (!$this->isTrait() && $this->hasMethod($name = $this->name)) {
|
|
return $this->getMethod($name);
|
|
}
|
|
return null;
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/reflectionclass.getmethod.php )
|
|
*
|
|
* Gets a ReflectionMethod about a method. WarningThis function is
|
|
* currently not documented; only its argument list is available.
|
|
*
|
|
* @name mixed The method name to reflect.
|
|
*
|
|
* @return mixed A ReflectionMethod.
|
|
*/
|
|
public function getMethod($name) {
|
|
if (!$this->info) {
|
|
$method = hphp_get_method_info($this->name, $name);
|
|
} else {
|
|
$lname = strtolower($name);
|
|
$methods = $this->info['methods'];
|
|
if (isset($methods[$lname])) $method = $methods[$lname];
|
|
}
|
|
if (empty($method)) {
|
|
$class = $this->name;
|
|
throw new ReflectionException("Method $class::$name does not exist");
|
|
}
|
|
|
|
$ret = new ReflectionMethod(null, null);
|
|
$ret->info = $method;
|
|
$ret->name = $method['name'];
|
|
$ret->class = $method['class'];
|
|
return $ret;
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/reflectionclass.getmethods.php )
|
|
*
|
|
* Gets a list of methods. WarningThis function is currently not
|
|
* documented; only its argument list is available.
|
|
*
|
|
* @filter mixed Any combination of ReflectionMethod::IS_STATIC,
|
|
* ReflectionMethod::IS_PUBLIC,
|
|
* ReflectionMethod::IS_PROTECTED,
|
|
* ReflectionMethod::IS_PRIVATE,
|
|
* ReflectionMethod::IS_ABSTRACT,
|
|
* ReflectionMethod::IS_FINAL.
|
|
*
|
|
* @return mixed An array of methods.
|
|
*/
|
|
public function getMethods($filter = 0xFFFF) {
|
|
$ret = array();
|
|
$methods = $this->fetch('methods');
|
|
foreach ($methods as $name => $_) {
|
|
$m = $this->getMethod($name);
|
|
if ((($filter & ReflectionMethod::IS_PUBLIC)) && $m->isPublic() ||
|
|
(($filter & ReflectionMethod::IS_PROTECTED)) && $m->isProtected() ||
|
|
(($filter & ReflectionMethod::IS_PRIVATE)) && $m->isPrivate() ||
|
|
(($filter & ReflectionMethod::IS_STATIC)) && $m->isStatic() ||
|
|
(($filter & ReflectionMethod::IS_FINAL)) && $m->isFinal() ||
|
|
(($filter & ReflectionMethod::IS_ABSTRACT && $m->isAbstract()))) {
|
|
$ret[] = $m;
|
|
}
|
|
}
|
|
return $ret;
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/reflectionclass.getproperty.php
|
|
* )
|
|
*
|
|
* Gets a property. WarningThis function is currently not documented; only
|
|
* its argument list is available.
|
|
*
|
|
* @name mixed The property name.
|
|
*
|
|
* @return mixed A ReflectionProperty.
|
|
*/
|
|
public function getProperty($name) {
|
|
$properties = $this->fetch('properties');
|
|
if (!isset($properties[$name])) {
|
|
$class = $this->info['name'];
|
|
throw new ReflectionException("Property $class::$name does not exist");
|
|
}
|
|
|
|
$ret = new ReflectionProperty(null, null);
|
|
$ret->info = $properties[$name];
|
|
$ret->name = $name;
|
|
$ret->class = $this->info['name'];
|
|
return $ret;
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from
|
|
* http://php.net/manual/en/reflectionclass.getproperties.php )
|
|
*
|
|
* Retrieves reflected properties.
|
|
*
|
|
* @return mixed An array of ReflectionProperty objects.
|
|
*/
|
|
public function getProperties($filter = 0xFFFF) {
|
|
$ret = array();
|
|
foreach ($this->fetch('properties') as $name => $_) {
|
|
$p = $this->getProperty($name);
|
|
if (($filter & ReflectionProperty::IS_PUBLIC) && $p->isPublic() ||
|
|
($filter & ReflectionProperty::IS_PROTECTED) && $p->isProtected() ||
|
|
($filter & ReflectionProperty::IS_PRIVATE) && $p->isPrivate() ||
|
|
($filter & ReflectionProperty::IS_STATIC) && $p->isStatic()) {
|
|
$ret[] = $p;
|
|
}
|
|
}
|
|
return $ret;
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/reflectionclass.getconstants.php
|
|
* )
|
|
*
|
|
* Gets defined constants from a class. WarningThis function is currently
|
|
* not documented; only its argument list is available.
|
|
*
|
|
* @return mixed An array of constants.
|
|
*/
|
|
public function getConstants() {
|
|
return $this->fetch('constants');
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/reflectionclass.getconstant.php
|
|
* )
|
|
*
|
|
* Gets the defined constants. WarningThis function is currently not
|
|
* documented; only its argument list is available.
|
|
*
|
|
* @name mixed
|
|
*/
|
|
public function getConstant($name) {
|
|
$constants = $this->fetch('constants');
|
|
if (!isset($constants[$name])) {
|
|
$class = $this->info['name'];
|
|
throw new ReflectionException("Class constant $class::$name does not exist");
|
|
}
|
|
return $constants[$name];
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from
|
|
* http://php.net/manual/en/reflectionclass.getinterfaces.php )
|
|
*
|
|
* Gets the interfaces.
|
|
*
|
|
* @return mixed An associative array of interfaces, with keys as
|
|
* interface names and the array values as
|
|
* ReflectionClass objects.
|
|
*/
|
|
public function getInterfaces() {
|
|
$ret = array();
|
|
foreach ($this->fetch('interfaces') as $name => $_) {
|
|
$cls = new ReflectionClass($name);
|
|
if ($cls->isInterface()) {
|
|
$ret[$cls->getName()] = $cls;
|
|
}
|
|
}
|
|
return $ret;
|
|
}
|
|
|
|
public function getTraits() {
|
|
$ret = array();
|
|
foreach ($this->fetch('traits') as $name => $_) {
|
|
$cls = new ReflectionClass($name);
|
|
if ($cls->isTrait()) {
|
|
$ret[$cls->getName()] = $cls;
|
|
}
|
|
}
|
|
return $ret;
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from
|
|
* http://php.net/manual/en/reflectionclass.getinterfacenames.php )
|
|
*
|
|
* Get the interface names.
|
|
*
|
|
* @return mixed A numerical array with interface names as the
|
|
* values.
|
|
*/
|
|
public function getInterfaceNames() {
|
|
$ret = array();
|
|
foreach ($this->fetch('interfaces') as $name => $_) {
|
|
$cls = new ReflectionClass($name);
|
|
if ($cls->isInterface()) {
|
|
$ret[] = $cls->getName();
|
|
}
|
|
}
|
|
return $ret;
|
|
}
|
|
|
|
public function getTraitNames() {
|
|
$ret = array();
|
|
foreach ($this->fetch('traits') as $name => $_) {
|
|
$cls = new ReflectionClass($name);
|
|
if ($cls->isTrait()) {
|
|
$ret[] = $cls->getName();
|
|
}
|
|
}
|
|
return $ret;
|
|
}
|
|
|
|
public function getTraitAliases() {
|
|
$ret = array();
|
|
foreach ($this->fetch('trait_aliases') as $old_name => $new_name) {
|
|
$ret[$old_name] = $new_name;
|
|
}
|
|
return $ret;
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/reflectionclass.isinterface.php
|
|
* )
|
|
*
|
|
* Checks whether the class is an interface. WarningThis function is
|
|
* currently not documented; only its argument list is available.
|
|
*
|
|
* @return mixed Returns TRUE on success or FALSE on failure.
|
|
*/
|
|
public function isInterface() {
|
|
return $this->check('interface');
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/reflectionclass.isabstract.php )
|
|
*
|
|
* Checks if the class is abstract.
|
|
*
|
|
* @return mixed Returns TRUE on success or FALSE on failure.
|
|
*/
|
|
public function isAbstract() {
|
|
return $this->check('abstract');
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/reflectionclass.isfinal.php )
|
|
*
|
|
* Checks if a class is final.
|
|
*
|
|
* @return mixed Returns TRUE on success or FALSE on failure.
|
|
*/
|
|
public function isFinal() {
|
|
return $this->check('final');
|
|
}
|
|
|
|
public function isTrait() {
|
|
return $this->check('trait');
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/reflectionclass.getmodifiers.php
|
|
* )
|
|
*
|
|
* WarningThis function is currently not documented; only its argument
|
|
* list is available.
|
|
*
|
|
*/
|
|
public function getModifiers() {
|
|
return $this->fetch('modifiers');
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/reflectionclass.isinstance.php )
|
|
*
|
|
* Checks if an object is an instance of a class.
|
|
*
|
|
* @obj mixed The object being compared to.
|
|
*
|
|
* @return mixed Returns TRUE on success or FALSE on failure.
|
|
*/
|
|
public function isInstance($obj) {
|
|
return hphp_instanceof($obj, $this->name);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/reflectionclass.newinstance.php
|
|
* )
|
|
*
|
|
* Creates a new cass instance of the class, the given arguments are
|
|
* passed to the class constructor.
|
|
*
|
|
*/
|
|
public function newInstance() {
|
|
$args = func_get_args();
|
|
return hphp_create_object($this->name, $args);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from
|
|
* http://php.net/manual/en/reflectionclass.newinstanceargs.php )
|
|
*
|
|
* Creates a new cass instance of the class, the given arguments are
|
|
* passed to the class constructor. WarningThis function is currently not
|
|
* documented; only its argument list is available.
|
|
*
|
|
* @args mixed The parameters to be passed to the class constructor
|
|
* as an array.
|
|
*
|
|
* @return mixed Returns a new instance of the class.
|
|
*/
|
|
public function newInstanceArgs($args) {
|
|
return hphp_create_object($this->name, array_values($args));
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from
|
|
* http://php.net/manual/en/reflectionclass.getparentclass.php )
|
|
*
|
|
* WarningThis function is currently not documented; only its argument
|
|
* list is available.
|
|
*
|
|
* @return mixed A ReflectionClass.
|
|
*/
|
|
public function getParentClass() {
|
|
$parent = $this->fetch('parent');
|
|
if (empty($parent)) {
|
|
return false;
|
|
}
|
|
return new ReflectionClass($parent);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/reflectionclass.issubclassof.php
|
|
* )
|
|
*
|
|
* Checks if the class is a subclass of a specified class.
|
|
*
|
|
* @cls mixed The class name being checked against.
|
|
*
|
|
* @return mixed Returns TRUE on success or FALSE on failure.
|
|
*/
|
|
public function isSubclassOf($cls) {
|
|
if ($cls instanceof ReflectionClass) {
|
|
$cls = $cls->name;
|
|
}
|
|
foreach ($this->fetch('interfaces') as $name => $_) {
|
|
if (strcasecmp($cls, $name) == 0) {
|
|
return true;
|
|
}
|
|
}
|
|
$parent = $this->fetch('parent');
|
|
if (empty($parent)) {
|
|
return false;
|
|
}
|
|
if (strcasecmp($cls, $parent) == 0) {
|
|
return true;
|
|
}
|
|
return $this->getParentClass()->isSubclassOf($cls);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from
|
|
* http://php.net/manual/en/reflectionclass.getstaticproperties.php )
|
|
*
|
|
* Get the static properties. WarningThis function is currently not
|
|
* documented; only its argument list is available.
|
|
*
|
|
* @return mixed The static properties, as an array.
|
|
*/
|
|
public function getStaticProperties() {
|
|
$ret = array();
|
|
foreach ($this->getProperties() as $prop) {
|
|
if ($prop->isStatic()) {
|
|
$ret[$prop->name] = $prop;
|
|
}
|
|
}
|
|
return $ret;
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from
|
|
* http://php.net/manual/en/reflectionclass.getstaticpropertyvalue.php )
|
|
*
|
|
* Gets the static property values. WarningThis function is currently not
|
|
* documented; only its argument list is available.
|
|
*
|
|
* @name mixed
|
|
* @default mixed
|
|
*/
|
|
public function getStaticPropertyValue($name, $default = null) {
|
|
if ($this->hasProperty($name) &&
|
|
$this->getProperty($name)->isStatic()) {
|
|
return hphp_get_static_property($this->name, $name);
|
|
}
|
|
return $default;
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from
|
|
* http://php.net/manual/en/reflectionclass.setstaticpropertyvalue.php )
|
|
*
|
|
* Sets static property value. WarningThis function is currently not
|
|
* documented; only its argument list is available.
|
|
*
|
|
* @name mixed Property name.
|
|
* @value mixed New property value.
|
|
*
|
|
* @return mixed No value is returned.
|
|
*/
|
|
public function setStaticPropertyValue($name, $value) {
|
|
hphp_set_static_property($this->name, $name, $value);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from
|
|
* http://php.net/manual/en/reflectionclass.getdefaultproperties.php )
|
|
*
|
|
* Gets default properties from a class. WarningThis function is currently
|
|
* not documented; only its argument list is available.
|
|
*
|
|
* @return mixed An array of default properties.
|
|
*/
|
|
public function getDefaultProperties() {
|
|
$ret = array();
|
|
foreach ($this->getProperties() as $prop) {
|
|
if ($prop->isDefault()) {
|
|
$ret[$prop->name] = $prop;
|
|
}
|
|
}
|
|
return $ret;
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from
|
|
* http://php.net/manual/en/reflectionclass.isiterateable.php )
|
|
*
|
|
* Checks whether the class is iterateable.
|
|
*
|
|
* @return mixed Returns TRUE on success or FALSE on failure.
|
|
*/
|
|
public function isIterateable() {
|
|
return $this->isSubclassOf('ArrayAccess');
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from
|
|
* http://php.net/manual/en/reflectionclass.implementsinterface.php )
|
|
*
|
|
* Checks whether it implements an interface.
|
|
*
|
|
* @cls mixed The interface name.
|
|
*
|
|
* @return mixed Returns TRUE on success or FALSE on failure.
|
|
*/
|
|
public function implementsInterface($cls) {
|
|
if ($cls instanceof ReflectionClass) {
|
|
$cls = $cls->name;
|
|
}
|
|
if (!interface_exists($cls)) {
|
|
throw new ReflectionException("$cls is not an Interface");
|
|
}
|
|
foreach ($this->fetch('interfaces') as $name => $_) {
|
|
if (strcasecmp($cls, $name) == 0) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/reflectionclass.getextension.php
|
|
* )
|
|
*
|
|
* Gets an extensions ReflectionExtension object. WarningThis function is
|
|
* currently not documented; only its argument list is available.
|
|
*
|
|
* @return mixed A ReflectionExtension object.
|
|
*/
|
|
public function getExtension() {
|
|
return $this->fetch('extension');
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from
|
|
* http://php.net/manual/en/reflectionclass.getextensionname.php )
|
|
*
|
|
* Gets an extensions name. WarningThis function is currently not
|
|
* documented; only its argument list is available.
|
|
*
|
|
* @return mixed The extensions name.
|
|
*/
|
|
public function getExtensionName() {
|
|
return $this->fetch('extension')->getName();
|
|
}
|
|
|
|
public function getAttribute($name) {
|
|
$attrs = $this->fetch('attributes');
|
|
return isset($attrs[$name]) ? $attrs[$name] : null;
|
|
}
|
|
|
|
public function getAttributes() {
|
|
return $this->fetch('attributes');
|
|
}
|
|
|
|
public function getAttributeRecursive($name) {
|
|
$attrs = $this->fetch('attributes_rec');
|
|
return isset($attrs[$name]) ? $attrs[$name] : null;
|
|
}
|
|
|
|
public function getAttributesRecursive() {
|
|
return $this->fetch('attributes_rec');
|
|
}
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// object
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/class.reflectionobject.php )
|
|
*
|
|
* The ReflectionObject class reports information about an object.
|
|
*
|
|
*/
|
|
class ReflectionObject extends ReflectionClass {
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/reflectionobject.export.php )
|
|
*
|
|
* Exports a reflection. WarningThis function is currently not documented;
|
|
* only its argument list is available.
|
|
*
|
|
* @obj mixed The reflection to export.
|
|
* @ret mixed Setting to TRUE will return the export, as opposed
|
|
* to emitting it. Setting to FALSE (the default) will
|
|
* do the opposite.
|
|
*
|
|
* @return mixed If the return parameter is set to TRUE, then the
|
|
* export is returned as a string, otherwise NULL is
|
|
* returned.
|
|
*/
|
|
public static function export($obj, $ret=false) {
|
|
$obj = new ReflectionObject($obj);
|
|
$str = (string)$obj;
|
|
if ($ret) {
|
|
return $str;
|
|
}
|
|
print $str;
|
|
}
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// property
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/class.reflectionproperty.php )
|
|
*
|
|
* The ReflectionProperty class reports information about a classes
|
|
* properties.
|
|
*
|
|
*/
|
|
class ReflectionProperty implements Reflector {
|
|
const IS_STATIC = 1;
|
|
const IS_PUBLIC = 256;
|
|
const IS_PROTECTED = 512;
|
|
const IS_PRIVATE = 1024;
|
|
|
|
public $info;
|
|
public $name;
|
|
public $class;
|
|
|
|
public function __construct($cls, $name) {
|
|
if ($cls && $name) {
|
|
if (!is_object($cls)) {
|
|
$cls = new ReflectionClass($cls);
|
|
} else {
|
|
$cls = new ReflectionClass(get_class($cls));
|
|
}
|
|
$prop = $cls->getProperty($name);
|
|
if ($prop) {
|
|
$this->info = $prop->info;
|
|
$this->name = $prop->name;
|
|
$this->class = $prop->class;
|
|
}
|
|
}
|
|
}
|
|
|
|
public function __toString() {
|
|
return "";
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/reflectionproperty.export.php )
|
|
*
|
|
* Exports a reflection. WarningThis function is currently not documented;
|
|
* only its argument list is available.
|
|
*
|
|
* @cls mixed The reflection to export.
|
|
* @name mixed The property name.
|
|
* @ret mixed Setting to TRUE will return the export, as opposed
|
|
* to emitting it. Setting to FALSE (the default) will
|
|
* do the opposite.
|
|
*/
|
|
public static function export($cls, $name, $ret=false) {
|
|
if (!is_object($cls)) {
|
|
$cls = new ReflectionClass($cls);
|
|
} else {
|
|
$cls = new ReflectionClass(get_class($cls));
|
|
}
|
|
$obj = $cls->getProperty($name);
|
|
$str = (string)$obj;
|
|
if ($ret) {
|
|
return $str;
|
|
}
|
|
print $str;
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/reflectionproperty.getname.php )
|
|
*
|
|
* Gets the properties name. WarningThis function is currently not
|
|
* documented; only its argument list is available.
|
|
*
|
|
* @return mixed The name of the reflected property.
|
|
*/
|
|
public function getName() {
|
|
return $this->info['name'];
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/reflectionproperty.ispublic.php
|
|
* )
|
|
*
|
|
* Checks whether the property is public.
|
|
*
|
|
* @return mixed TRUE if the property is public, FALSE otherwise.
|
|
*/
|
|
public function isPublic() {
|
|
return $this->info['access'] == 'public';
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/reflectionproperty.isprivate.php
|
|
* )
|
|
*
|
|
* Checks whether the property is private.
|
|
*
|
|
* @return mixed TRUE if the property is private, FALSE otherwise.
|
|
*/
|
|
public function isPrivate() {
|
|
return $this->info['access'] == 'private';
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from
|
|
* http://php.net/manual/en/reflectionproperty.isprotected.php )
|
|
*
|
|
* Checks whether the property is protected.
|
|
*
|
|
* @return mixed TRUE if the property is protected, FALSE otherwise.
|
|
*/
|
|
public function isProtected() {
|
|
return $this->info['access'] == 'protected';
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/reflectionproperty.isstatic.php
|
|
* )
|
|
*
|
|
* Checks whether the property is static.
|
|
*
|
|
* @return mixed TRUE if the property is static, FALSE otherwise.
|
|
*/
|
|
public function isStatic() {
|
|
return isset($this->info['static']);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/reflectionproperty.isdefault.php
|
|
* )
|
|
*
|
|
* Checks whether the property is the default.
|
|
*
|
|
* @return mixed TRUE if the property was declared at compile-time,
|
|
* or FALSE if it was created at run-time.
|
|
*/
|
|
public function isDefault() {
|
|
return $this->info['default'];
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from
|
|
* http://php.net/manual/en/reflectionproperty.setaccessible.php )
|
|
*
|
|
* Sets a property to be accessible. For example, it may allow protected
|
|
* and private properties to be accessed.
|
|
*
|
|
* @return mixed No value is returned.
|
|
*/
|
|
public function setAccessible($accessible) {
|
|
throw new ReflectionException(__METHOD__." is not supported");
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from
|
|
* http://php.net/manual/en/reflectionproperty.getmodifiers.php )
|
|
*
|
|
* Gets the modifiers. WarningThis function is currently not documented;
|
|
* only its argument list is available.
|
|
*
|
|
* @return mixed A numeric representation of the modifiers.
|
|
*/
|
|
public function getModifiers() {
|
|
return $this->info['modifiers'];
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/reflectionproperty.getvalue.php
|
|
* )
|
|
*
|
|
* Gets the properties value. WarningThis function is currently not
|
|
* documented; only its argument list is available.
|
|
*
|
|
* @obj mixed The object being reflected.
|
|
*
|
|
* @return mixed The current value of the property.
|
|
*/
|
|
public function getValue($obj = null) {
|
|
if ($this->isStatic()) {
|
|
return hphp_get_static_property($this->info['class'],
|
|
$this->info['name']);
|
|
}
|
|
if ($obj) {
|
|
return hphp_get_property($obj, $this->info['class'],
|
|
$this->info['name']);
|
|
}
|
|
return null;
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/reflectionproperty.setvalue.php
|
|
* )
|
|
*
|
|
* Sets (changes) a properties value. WarningThis function is currently
|
|
* not documented; only its argument list is available.
|
|
*
|
|
* @obj mixed The object name.
|
|
* @value mixed The new value.
|
|
*
|
|
* @return mixed No value is returned.
|
|
*/
|
|
public function setValue($obj, $value) {
|
|
if ($this->isStatic()) {
|
|
hphp_set_static_property($this->info['class'], $this->info['name'],
|
|
$value);
|
|
} else {
|
|
hphp_set_property($obj, $this->info['class'], $this->info['name'],
|
|
$value);
|
|
}
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from
|
|
* http://php.net/manual/en/reflectionproperty.getdeclaringclass.php )
|
|
*
|
|
* Gets the declaring class. WarningThis function is currently not
|
|
* documented; only its argument list is available.
|
|
*
|
|
* @return mixed A ReflectionClass object.
|
|
*/
|
|
public function getDeclaringClass() {
|
|
if (empty($this->info['class'])) {
|
|
return null;
|
|
}
|
|
return new ReflectionClass($this->info['class']);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from
|
|
* http://php.net/manual/en/reflectionproperty.getdoccomment.php )
|
|
*
|
|
* Gets the doc comment. WarningThis function is currently not documented;
|
|
* only its argument list is available.
|
|
*
|
|
* @return mixed The doc comment.
|
|
*/
|
|
public function getDocComment() {
|
|
return $this->info['doc'];
|
|
}
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// method
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/class.reflectionmethod.php )
|
|
*
|
|
* The ReflectionMethod class reports information about a method.
|
|
*
|
|
*/
|
|
class ReflectionMethod extends ReflectionFunctionAbstract
|
|
implements Reflector {
|
|
const IS_STATIC = 1;
|
|
const IS_PUBLIC = 256;
|
|
const IS_PROTECTED = 512;
|
|
const IS_PRIVATE = 1024;
|
|
const IS_ABSTRACT = 2;
|
|
const IS_FINAL = 4;
|
|
|
|
public $name;
|
|
public $class;
|
|
|
|
public function __construct($cls, $name = '') {
|
|
if (!$name && is_string($cls)) {
|
|
$arr = explode('::', $cls);
|
|
if (count($arr) == 2) {
|
|
$cls = $arr[0];
|
|
$name = $arr[1];
|
|
}
|
|
}
|
|
if ($cls && $name) {
|
|
$method = hphp_get_method_info($cls, $name);
|
|
if (!$method) {
|
|
throw new ReflectionException("Method $cls::$name does not exist");
|
|
}
|
|
|
|
$this->info = $method;
|
|
$this->name = $method['name'];
|
|
$this->class = $method['class'];
|
|
}
|
|
}
|
|
|
|
public function __toString() {
|
|
//TODO
|
|
return "";
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/reflectionmethod.export.php )
|
|
*
|
|
* Exports a ReflectionMethod. WarningThis function is currently not
|
|
* documented; only its argument list is available.
|
|
*
|
|
* @cls mixed The class name.
|
|
* @name mixed The name of the method.
|
|
* @ret mixed Setting to TRUE will return the export, as opposed
|
|
* to emitting it. Setting to FALSE (the default) will
|
|
* do the opposite.
|
|
*
|
|
* @return mixed If the return parameter is set to TRUE, then the
|
|
* export is returned as a string, otherwise NULL is
|
|
* returned.
|
|
*/
|
|
public static function export($cls, $name, $ret=false) {
|
|
if (!is_object($cls)) {
|
|
$cls = new ReflectionClass($cls);
|
|
} else {
|
|
$cls = new ReflectionClass(get_class($cls));
|
|
}
|
|
$obj = $cls->getMethod($name);
|
|
$str = (string)$obj;
|
|
if ($ret) {
|
|
return $str;
|
|
}
|
|
print $str;
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/reflectionmethod.invoke.php )
|
|
*
|
|
* Invokes a reflected method.
|
|
*
|
|
* @obj mixed The object to invoke the method on. In case of
|
|
* static methods, you can pass null to this parameter.
|
|
*
|
|
* @return mixed Returns the method result.
|
|
*/
|
|
public function invoke($obj) {
|
|
$args = func_get_args();
|
|
array_shift($args);
|
|
return hphp_invoke_method($obj, $this->info['class'], $this->info['name'],
|
|
$args);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/reflectionmethod.invokeargs.php
|
|
* )
|
|
*
|
|
* Invoke arguments.
|
|
*
|
|
* @obj mixed The object to invoke the method on. In case of
|
|
* static methods, you can pass null to this parameter.
|
|
* @args mixed The parameters to be passed to the function, as an
|
|
* array.
|
|
*
|
|
* @return mixed Returns the method result.
|
|
*/
|
|
public function invokeArgs($obj, $args) {
|
|
return hphp_invoke_method($obj, $this->info['class'], $this->info['name'],
|
|
array_values($args));
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/reflectionmethod.isfinal.php )
|
|
*
|
|
* Checks if the method is final.
|
|
*
|
|
* @return mixed TRUE if the method is final, otherwise FALSE
|
|
*/
|
|
public function isFinal() {
|
|
return isset($this->info['final']);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/reflectionmethod.isabstract.php
|
|
* )
|
|
*
|
|
* Checks if the method is abstract.
|
|
*
|
|
* @return mixed TRUE if the method is abstract, otherwise FALSE
|
|
*/
|
|
public function isAbstract() {
|
|
return isset($this->info['abstract']);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/reflectionmethod.ispublic.php )
|
|
*
|
|
* Checks if the method is public.
|
|
*
|
|
* @return mixed TRUE if the method is public, otherwise FALSE
|
|
*/
|
|
public function isPublic() {
|
|
return $this->info['access'] == "public";
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/reflectionmethod.isprivate.php )
|
|
*
|
|
* Checks if the method is private. WarningThis function is currently not
|
|
* documented; only its argument list is available.
|
|
*
|
|
* @return mixed TRUE if the method is private, otherwise FALSE
|
|
*/
|
|
public function isPrivate() {
|
|
return $this->info['access'] == "private";
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/reflectionmethod.isprotected.php
|
|
* )
|
|
*
|
|
* Checks if the method is protected.
|
|
*
|
|
* @return mixed TRUE if the method is protected, otherwise FALSE
|
|
*/
|
|
public function isProtected() {
|
|
return $this->info['access'] == "protected";
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/reflectionmethod.isstatic.php )
|
|
*
|
|
* Checks if the method is static.
|
|
*
|
|
* @return mixed TRUE if the method is static, otherwise FALSE
|
|
*/
|
|
public function isStatic() {
|
|
return isset($this->info['static']);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from
|
|
* http://php.net/manual/en/reflectionmethod.isconstructor.php )
|
|
*
|
|
* Checks if the method is a constructor.
|
|
*
|
|
* @return mixed TRUE if the method is a constructor, otherwise FALSE
|
|
*/
|
|
public function isConstructor() {
|
|
return isset($this->info['constructor']);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from
|
|
* http://php.net/manual/en/reflectionmethod.isdestructor.php )
|
|
*
|
|
* Checks if the method is a destructor.
|
|
*
|
|
* @return mixed TRUE if the method is a destructor, otherwise FALSE
|
|
*/
|
|
public function isDestructor() {
|
|
return $this->getName() == '__destruct';
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from
|
|
* http://php.net/manual/en/reflectionmethod.getmodifiers.php )
|
|
*
|
|
* Gets the method modifiers.
|
|
*
|
|
* @return mixed A numeric representation of the modifiers. The
|
|
* modifiers are listed below. The actual meanings of
|
|
* these modifiers are described in the predefined
|
|
* constants. ReflectionMethod modifiers value constant
|
|
* 1 ReflectionMethod::IS_STATIC 2
|
|
* ReflectionMethod::IS_ABSTRACT 4
|
|
* ReflectionMethod::IS_FINAL 256
|
|
* ReflectionMethod::IS_PUBLIC 512
|
|
* ReflectionMethod::IS_PROTECTED 1024
|
|
* ReflectionMethod::IS_PRIVATE
|
|
*/
|
|
public function getModifiers() {
|
|
return $this->info['modifiers'];
|
|
}
|
|
|
|
public function getClosure() {
|
|
return $this->info['closure'];
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from
|
|
* http://php.net/manual/en/reflectionmethod.getdeclaringclass.php )
|
|
*
|
|
* Gets the declaring class for the reflected method.
|
|
*
|
|
* @return mixed A ReflectionClass object of the class that the
|
|
* reflected method is part of.
|
|
*/
|
|
public function getDeclaringClass() {
|
|
if (empty($this->info['class'])) {
|
|
return null;
|
|
}
|
|
return new ReflectionClass($this->info['class']);
|
|
}
|
|
|
|
public function getAttribute($name) {
|
|
$attrs = $this->info['attributes'];
|
|
return isset($attrs[$name]) ? $attrs[$name] : null;
|
|
}
|
|
|
|
public function getAttributes() {
|
|
return $this->info['attributes'];
|
|
}
|
|
|
|
public function getAttributeRecursive($name) {
|
|
$attrs = $this->info['attributes'];
|
|
if (isset($attrs[$name])) {
|
|
return $attrs[$name];
|
|
}
|
|
$p = get_parent_class($this->class);
|
|
if ($p === false) {
|
|
return null;
|
|
}
|
|
$rm = new ReflectionMethod($p, $this->name);
|
|
if ($rm->isPrivate()) {
|
|
return null;
|
|
}
|
|
return $rm->getAttributeRecursive($name);
|
|
}
|
|
|
|
public function getAttributesRecursive() {
|
|
$attrs = $this->info['attributes'];
|
|
$p = get_parent_class($this->class);
|
|
if ($p !== false) {
|
|
$rm = new ReflectionMethod($p, $this->name);
|
|
if (!$rm->isPrivate()) {
|
|
$attrs += $rm->getAttributesRecursive();
|
|
}
|
|
}
|
|
return $attrs;
|
|
}
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// extension
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/class.reflectionextension.php )
|
|
*
|
|
* The ReflectionExtension class reports information about an extension.
|
|
*
|
|
*/
|
|
class ReflectionExtension implements Reflector {
|
|
private $name;
|
|
private $info;
|
|
|
|
public function __construct($name) {
|
|
$this->info = hphp_get_extension_info($name);
|
|
}
|
|
|
|
public function __toString() {
|
|
return "";
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/reflectionextension.export.php )
|
|
*
|
|
* Exports a reflected extension. The output format of this function is
|
|
* the same as the CLI argument --re [extension].
|
|
*
|
|
* @name mixed The reflection to export.
|
|
* @ret mixed Setting to TRUE will return the export, as opposed
|
|
* to emitting it. Setting to FALSE (the default) will
|
|
* do the opposite.
|
|
*
|
|
* @return mixed If the return parameter is set to TRUE, then the
|
|
* export is returned as a string, otherwise NULL is
|
|
* returned.
|
|
*/
|
|
public static function export($name, $ret=false) {
|
|
$obj = new ReflectionExtension($name);
|
|
$str = (string)$obj;
|
|
if ($ret) {
|
|
return $str;
|
|
}
|
|
print $str;
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/reflectionextension.getname.php
|
|
* )
|
|
*
|
|
* Gets the extensions name.
|
|
*
|
|
* @return mixed The extensions name.
|
|
*/
|
|
public function getName() {
|
|
return $this->info['name'];
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from
|
|
* http://php.net/manual/en/reflectionextension.getversion.php )
|
|
*
|
|
* Gets the version of the extension.
|
|
*
|
|
* @return mixed The version of the extension.
|
|
*/
|
|
public function getVersion() {
|
|
return $this->info['version'];
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from
|
|
* http://php.net/manual/en/reflectionextension.getfunctions.php )
|
|
*
|
|
* Get defined functions from an extension.
|
|
*
|
|
* @return mixed An associative array of ReflectionFunction objects,
|
|
* for each function defined in the extension with the
|
|
* keys being the function names. If no function are
|
|
* defined, an empty array is returned.
|
|
*/
|
|
public function getFunctions() {
|
|
return $this->info['functions'];
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from
|
|
* http://php.net/manual/en/reflectionextension.getconstants.php )
|
|
*
|
|
* Get defined constants from an extension.
|
|
*
|
|
* @return mixed An associative array with constant names as keys.
|
|
*/
|
|
public function getConstants() {
|
|
return $this->info['constants'];
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from
|
|
* http://php.net/manual/en/reflectionextension.getinientries.php )
|
|
*
|
|
* Get the ini entries for an extension.
|
|
*
|
|
* @return mixed An associative array with the ini entries as keys,
|
|
* with their defined values as values.
|
|
*/
|
|
public function getINIEntries() {
|
|
return $this->info['ini'];
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from
|
|
* http://php.net/manual/en/reflectionextension.getclasses.php )
|
|
*
|
|
* Gets a list of classes from an extension.
|
|
*
|
|
* @return mixed An array of ReflectionClass objects, one for each
|
|
* class within the extension. If no classes are
|
|
* defined, an empty array is returned.
|
|
*/
|
|
public function getClasses() {
|
|
return $this->info['classes'];
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from
|
|
* http://php.net/manual/en/reflectionextension.getclassnames.php )
|
|
*
|
|
* Gets a listing of class names as defined in the extension.
|
|
*
|
|
* @return mixed An array of class names, as defined in the
|
|
* extension. If no classes are defined, an empty array
|
|
* is returned.
|
|
*/
|
|
public function getClassNames() {
|
|
$ret = array();
|
|
foreach ($this->info['classes'] as $cls) {
|
|
$ret[] = $cls->getName();
|
|
}
|
|
return $ret;
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/reflectionextension.info.php )
|
|
*
|
|
* Gets information about an extension.
|
|
*
|
|
* @return mixed Information about the extension.
|
|
*/
|
|
public function info() {
|
|
return $this->info['info'];
|
|
}
|
|
}
|
|
|
|
class SoapFault extends Exception {
|
|
public $faultcode;
|
|
public $faultcodens;
|
|
public $faultstring;
|
|
public $faultactor;
|
|
public $detail;
|
|
public $_name;
|
|
public $headerfault;
|
|
|
|
public function __construct($code, $message, $actor = null, $detail = null,
|
|
$name = null, $header = null) {
|
|
$fault_ns = null;
|
|
$fault_code = null;
|
|
if (is_string($code)) {
|
|
$fault_code = $code;
|
|
} else if (is_array($code) && count($code) == 2) {
|
|
$code = array_values($code);
|
|
$fault_ns = $code[0];
|
|
$fault_code = $code[1];
|
|
if (!is_string($fault_ns) || !is_string($fault_code)) {
|
|
hphp_throw_fatal_error("Invalid fault code");
|
|
return;
|
|
}
|
|
} else {
|
|
hphp_throw_fatal_error("Invalid fault code");
|
|
return;
|
|
}
|
|
$this->faultcodens = $fault_ns;
|
|
$this->faultcode = $fault_code;
|
|
if (empty($this->faultcode)) {
|
|
hphp_throw_fatal_error("Invalid fault code");
|
|
return;
|
|
}
|
|
|
|
$this->faultstring = $this->message = $message;
|
|
$this->faultactor = $actor;
|
|
$this->detail = $detail;
|
|
$this->_name = $name;
|
|
$this->headerfault = $header;
|
|
|
|
$SOAP_1_1 = 1;
|
|
$SOAP_1_2 = 2;
|
|
$SOAP_1_1_ENV_NAMESPACE = 'http://schemas.xmlsoap.org/soap/envelope/';
|
|
$SOAP_1_2_ENV_NAMESPACE = 'http://www.w3.org/2003/05/soap-envelope';
|
|
|
|
$soap_version = _soap_active_version();
|
|
if (empty($this->faultcodens)) {
|
|
if ($soap_version == $SOAP_1_1) {
|
|
if ($this->faultcode == "Client" ||
|
|
$this->faultcode == "Server" ||
|
|
$this->faultcode == "VersionMismatch" ||
|
|
$this->faultcode == "MustUnderstand") {
|
|
$this->faultcodens = $SOAP_1_1_ENV_NAMESPACE;
|
|
}
|
|
} else if ($soap_version == $SOAP_1_2) {
|
|
if ($this->faultcode == "Client") {
|
|
$this->faultcode = "Sender";
|
|
$this->faultcodens = $SOAP_1_2_ENV_NAMESPACE;
|
|
} else if ($this->faultcode == "Server") {
|
|
$this->faultcode = "Receiver";
|
|
$this->faultcodens = $SOAP_1_2_ENV_NAMESPACE;
|
|
} else if ($this->faultcode == "VersionMismatch" ||
|
|
$this->faultcode == "MustUnderstand" ||
|
|
$this->faultcode == "DataEncodingUnknown") {
|
|
$this->faultcodens = $SOAP_1_2_ENV_NAMESPACE;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public function __toString() {
|
|
return "SoapFault exception: [" . $this->faultcode . "] " .
|
|
$this->faultstring;
|
|
}
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/class.splobjectstorage.php )
|
|
*
|
|
* The SplObjectStorage class provides a map from objects to data or, by
|
|
* ignoring data, an object set. This dual purpose can be useful in many
|
|
* cases involving the need to uniquely identify objects.
|
|
*
|
|
*/
|
|
class SplObjectStorage implements Iterator, Countable {
|
|
private $storage = array();
|
|
private $index = 0;
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/splobjectstorage.rewind.php )
|
|
*
|
|
* Rewind the iterator to the first storage element.
|
|
*
|
|
* @return mixed No value is returned.
|
|
*/
|
|
function rewind() {
|
|
rewind($this->storage);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/splobjectstorage.valid.php )
|
|
*
|
|
* Returns if the current iterator entry is valid.
|
|
*
|
|
* @return mixed Returns TRUE if the iterator entry is valid, FALSE
|
|
* otherwise.
|
|
*/
|
|
function valid() {
|
|
return key($this->storage) !== false;
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/splobjectstorage.key.php )
|
|
*
|
|
* Returns the index at which the iterator currently is.
|
|
*
|
|
* @return mixed The index corresponding to the position of the
|
|
* iterator.
|
|
*/
|
|
function key() {
|
|
return $this->index;
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/splobjectstorage.current.php )
|
|
*
|
|
* Returns the current storage entry.
|
|
*
|
|
* @return mixed The object at the current iterator position.
|
|
*/
|
|
function current() {
|
|
return current($this->storage);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/splobjectstorage.next.php )
|
|
*
|
|
* Moves the iterator to the next object in the storage.
|
|
*
|
|
* @return mixed No value is returned.
|
|
*/
|
|
function next() {
|
|
next($this->storage);
|
|
$this->index++;
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/splobjectstorage.count.php )
|
|
*
|
|
* Counts the number of objects in the storage.
|
|
*
|
|
* @return mixed The number of objects in the storage.
|
|
*/
|
|
function count() {
|
|
return count($this->storage);
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/splobjectstorage.contains.php )
|
|
*
|
|
* Checks if the storage contains the object provided.
|
|
*
|
|
* @obj mixed The object to look for.
|
|
*
|
|
* @return mixed Returns TRUE if the object is in the storage, FALSE
|
|
* otherwise.
|
|
*/
|
|
function contains($obj) {
|
|
if (is_object($obj)) {
|
|
foreach($this->storage as $object) {
|
|
if ($object === $obj) {
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/splobjectstorage.attach.php )
|
|
*
|
|
* Adds an object inside the storage, and optionaly associate it to some
|
|
* data.
|
|
*
|
|
* @obj mixed The object to add.
|
|
*
|
|
* @return mixed No value is returned.
|
|
*/
|
|
function attach($obj) {
|
|
if (is_object($obj) && !$this->contains($obj)) {
|
|
$this->storage[] = $obj;
|
|
}
|
|
}
|
|
|
|
// Do NOT modifiy this doc comment block generated by idl/sysdoc.php
|
|
/**
|
|
* ( excerpt from http://php.net/manual/en/splobjectstorage.detach.php )
|
|
*
|
|
* Removes the object from the storage.
|
|
*
|
|
* @obj mixed The object to remove.
|
|
*
|
|
* @return mixed No value is returned.
|
|
*/
|
|
function detach($obj) {
|
|
if (is_object($obj)) {
|
|
foreach($this->storage as $idx => $object) {
|
|
if ($object === $obj) {
|
|
unset($this->storage[$idx]);
|
|
$this->rewind();
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Helps application inserting an artificial frame in xhprof's reporting.
|
|
*/
|
|
class XhprofFrame {
|
|
public function __construct($name) {
|
|
xhprof_frame_begin($name);
|
|
}
|
|
public function __destruct() {
|
|
xhprof_frame_end();
|
|
}
|
|
}
|
|
|
|
// Used as a sentinel type in 86pinit().
|
|
class __pinitSentinel {
|
|
}
|
|
|
|
// Used to represent resources
|
|
class __resource {
|
|
public function __toString() {
|
|
return hphp_to_string($this);
|
|
}
|
|
}
|
|
|