1
0
mirror of https://github.com/danog/psalm.git synced 2024-12-03 10:07:52 +01:00
psalm/stubs/CoreGenericClasses.phpstub

623 lines
16 KiB
PHP
Raw Normal View History

2017-02-11 01:10:13 +01:00
<?php
/**
* Interface to detect if a class is traversable using &foreach;.
* @link http://php.net/manual/en/class.traversable.php
*
* @template-covariant TKey
* @template-covariant TValue
2017-02-11 01:10:13 +01:00
*/
interface Traversable {
}
/**
2019-11-30 07:02:51 +01:00
* @template-covariant TKey
* @template-covariant TValue
* @template TSend
2019-11-30 07:02:51 +01:00
* @template-covariant TReturn
*
* @template-implements Traversable<TKey, TValue>
*/
class Generator implements Traversable {
/**
* @psalm-ignore-nullable-return
* @return ?TValue Can return any type.
*/
public function current() {}
/**
* @return void Any returned value is ignored.
*/
public function next() {}
/**
* @return TKey scalar on success, or null on failure.
*/
public function key() {}
/**
* @return bool The return value will be casted to boolean and then evaluated.
*/
public function valid() {}
/**
* @return void Any returned value is ignored.
*/
public function rewind() {}
/**
* @return TReturn Can return any type.
*/
public function getReturn() {}
/**
* @param TSend $value
* @psalm-ignore-nullable-return
* @return ?TValue Can return any type.
*/
public function send($value) {}
/**
* @psalm-ignore-nullable-return
* @return ?TValue Can return any type.
*/
public function throw(Throwable $exception) {}
}
2017-02-11 01:10:13 +01:00
/**
* Interface to provide accessing objects as arrays.
* @link http://php.net/manual/en/class.arrayaccess.php
*
* @template TKey
* @template TValue
*/
interface ArrayAccess {
/**
* Whether a offset exists
* @link http://php.net/manual/en/arrayaccess.offsetexists.php
*
* @param TKey $offset An offset to check for.
2017-05-25 04:07:49 +02:00
* @return bool true on success or false on failure.
* The return value will be casted to boolean if non-boolean was returned.
*
2017-02-11 01:10:13 +01:00
* @since 5.0.0
*/
public function offsetExists($offset);
/**
* Offset to retrieve
* @link http://php.net/manual/en/arrayaccess.offsetget.php
*
* @param TKey $offset The offset to retrieve.
* @return TValue|null Can return all value types.
* @psalm-ignore-nullable-return
*
2017-02-11 01:10:13 +01:00
* @since 5.0.0
*/
public function offsetGet($offset);
/**
* Offset to set
* @link http://php.net/manual/en/arrayaccess.offsetset.php
*
* @param TKey|null $offset The offset to assign the value to.
* @param TValue $value The value to set.
2017-02-11 01:10:13 +01:00
* @return void
*
2017-02-11 01:10:13 +01:00
* @since 5.0.0
*/
public function offsetSet($offset, $value);
/**
* Offset to unset
* @link http://php.net/manual/en/arrayaccess.offsetunset.php
*
* @param TKey $offset The offset to unset.
2017-02-11 01:10:13 +01:00
* @return void
*
2017-02-11 01:10:13 +01:00
* @since 5.0.0
*/
public function offsetUnset($offset);
}
/**
* This class allows objects to work as arrays.
* @link http://php.net/manual/en/class.arrayobject.php
*
* @template TKey of array-key
2017-02-11 01:10:13 +01:00
* @template TValue
* @template-implements IteratorAggregate<TKey, TValue>
* @template-implements ArrayAccess<TKey, TValue>
2017-02-11 01:10:13 +01:00
*/
class ArrayObject implements IteratorAggregate, ArrayAccess, Serializable, Countable {
2017-02-11 01:10:13 +01:00
/**
* Properties of the object have their normal functionality when accessed as list (var_dump, foreach, etc.).
*/
const STD_PROP_LIST = 1;
2017-02-11 01:10:13 +01:00
/**
* Entries can be accessed as properties (read and write).
*/
const ARRAY_AS_PROPS = 2;
2017-02-11 01:10:13 +01:00
/**
* Construct a new array object
* @link http://php.net/manual/en/arrayobject.construct.php
*
* @param array<TKey, TValue>|object $input The input parameter accepts an array or an Object.
2017-02-11 01:10:13 +01:00
* @param int $flags Flags to control the behaviour of the ArrayObject object.
* @param string $iterator_class Specify the class that will be used for iteration of the ArrayObject object. ArrayIterator is the default class used.
* @psalm-param class-string<ArrayIterator<TKey,TValue>>|class-string<ArrayObject<TKey,TValue>> $iterator_class
2017-02-11 01:10:13 +01:00
*
* @since 5.0.0
2017-02-11 01:10:13 +01:00
*/
public function __construct($input = null, $flags = 0, $iterator_class = "ArrayIterator") { }
2017-02-11 01:10:13 +01:00
/**
* Returns whether the requested index exists
* @link http://php.net/manual/en/arrayobject.offsetexists.php
*
2023-12-12 18:51:31 +01:00
* @param TKey $offset The index being checked.
2017-02-11 01:10:13 +01:00
* @return bool true if the requested index exists, otherwise false
*
2017-02-11 01:10:13 +01:00
* @since 5.0.0
*/
2023-12-12 18:51:31 +01:00
public function offsetExists($offset) { }
2017-02-11 01:10:13 +01:00
/**
* Returns the value at the specified index
* @link http://php.net/manual/en/arrayobject.offsetget.php
*
2023-12-12 18:51:31 +01:00
* @param TKey $offset The index with the value.
2017-02-11 01:10:13 +01:00
* @return TValue The value at the specified index or false.
*
2017-02-11 01:10:13 +01:00
* @since 5.0.0
*/
2023-12-12 18:51:31 +01:00
public function offsetGet($offset) { }
2017-02-11 01:10:13 +01:00
/**
* Sets the value at the specified index to newval
* @link http://php.net/manual/en/arrayobject.offsetset.php
*
2023-12-12 18:51:31 +01:00
* @param TKey $offset The index being set.
* @param TValue $value The new value for the index.
2017-02-11 01:10:13 +01:00
* @return void
*
2017-02-11 01:10:13 +01:00
* @since 5.0.0
*/
2023-12-12 18:51:31 +01:00
public function offsetSet($offset, $value) { }
2017-02-11 01:10:13 +01:00
/**
* Unsets the value at the specified index
* @link http://php.net/manual/en/arrayobject.offsetunset.php
*
2023-12-12 18:51:31 +01:00
* @param TKey $offset The index being unset.
2017-02-11 01:10:13 +01:00
* @return void
*
2017-02-11 01:10:13 +01:00
* @since 5.0.0
*/
2023-12-12 18:51:31 +01:00
public function offsetUnset($offset) { }
2017-02-11 01:10:13 +01:00
/**
* Appends the value
* @link http://php.net/manual/en/arrayobject.append.php
*
* @param TValue $value The value being appended.
2017-02-11 01:10:13 +01:00
* @return void
*
2017-02-11 01:10:13 +01:00
* @since 5.0.0
*/
public function append($value) { }
2017-02-11 01:10:13 +01:00
/**
* Creates a copy of the ArrayObject.
* @link http://php.net/manual/en/arrayobject.getarraycopy.php
*
* @return array<TKey, TValue> a copy of the array. When the ArrayObject refers to an object
* an array of the public properties of that object will be returned.
*
2017-02-11 01:10:13 +01:00
* @since 5.0.0
*/
public function getArrayCopy() { }
2017-02-11 01:10:13 +01:00
/**
* Get the number of public properties in the ArrayObject
* When the ArrayObject is constructed from an array all properties are public.
2017-02-11 01:10:13 +01:00
* @link http://php.net/manual/en/arrayobject.count.php
*
2017-02-11 01:10:13 +01:00
* @return int The number of public properties in the ArrayObject.
*
2017-02-11 01:10:13 +01:00
* @since 5.0.0
*/
public function count() { }
2017-02-11 01:10:13 +01:00
/**
* Gets the behavior flags.
* @link http://php.net/manual/en/arrayobject.getflags.php
*
2017-02-11 01:10:13 +01:00
* @return int the behavior flags of the ArrayObject.
*
2017-02-11 01:10:13 +01:00
* @since 5.1.0
*/
public function getFlags() { }
2017-02-11 01:10:13 +01:00
/**
* Sets the behavior flags.
*
2017-02-11 01:10:13 +01:00
* It takes on either a bitmask, or named constants. Using named
* constants is strongly encouraged to ensure compatibility for future
* versions.
*
2017-02-11 01:10:13 +01:00
* The available behavior flags are listed below. The actual
* meanings of these flags are described in the
* predefined constants.
*
2017-02-11 01:10:13 +01:00
* <table>
* ArrayObject behavior flags
* <tr valign="top">
* <td>value</td>
* <td>constant</td>
* </tr>
* <tr valign="top">
* <td>1</td>
* <td>
* ArrayObject::STD_PROP_LIST
* </td>
* </tr>
* <tr valign="top">
* <td>2</td>
* <td>
* ArrayObject::ARRAY_AS_PROPS
* </td>
* </tr>
* </table>
*
* @link http://php.net/manual/en/arrayobject.setflags.php
*
* @param int $flags The new ArrayObject behavior.
2017-02-11 01:10:13 +01:00
* @return void
*
2017-02-11 01:10:13 +01:00
* @since 5.1.0
*/
public function setFlags($flags) { }
2017-02-11 01:10:13 +01:00
/**
* Sort the entries by value
* @link http://php.net/manual/en/arrayobject.asort.php
*
2017-02-11 01:10:13 +01:00
* @return void
*
2017-02-11 01:10:13 +01:00
* @since 5.2.0
*/
public function asort() { }
2017-02-11 01:10:13 +01:00
/**
* Sort the entries by key
* @link http://php.net/manual/en/arrayobject.ksort.php
*
2017-02-11 01:10:13 +01:00
* @return void
*
2017-02-11 01:10:13 +01:00
* @since 5.2.0
*/
public function ksort() { }
2017-02-11 01:10:13 +01:00
/**
* Sort the entries with a user-defined comparison function and maintain key association
* @link http://php.net/manual/en/arrayobject.uasort.php
*
2017-02-11 01:10:13 +01:00
* Function <i>cmp_function</i> should accept two
* parameters which will be filled by pairs of entries.
* The comparison function must return an integer less than, equal
* to, or greater than zero if the first argument is considered to
* be respectively less than, equal to, or greater than the
* second.
*
* @param callable(TValue, TValue):int $cmp_function
2017-02-11 01:10:13 +01:00
* @return void
*
2017-02-11 01:10:13 +01:00
* @since 5.2.0
*/
public function uasort($cmp_function) { }
2017-02-11 01:10:13 +01:00
/**
* Sort the entries by keys using a user-defined comparison function
* @link http://php.net/manual/en/arrayobject.uksort.php
*
2017-02-11 01:10:13 +01:00
* Function <i>cmp_function</i> should accept two
* parameters which will be filled by pairs of entry keys.
* The comparison function must return an integer less than, equal
* to, or greater than zero if the first argument is considered to
* be respectively less than, equal to, or greater than the
* second.
*
* @param callable(TKey, TKey):int $cmp_function The callable comparison function.
2017-02-11 01:10:13 +01:00
* @return void
*
2017-02-11 01:10:13 +01:00
* @since 5.2.0
*/
public function uksort($cmp_function) { }
2017-02-11 01:10:13 +01:00
/**
* Sort entries using a "natural order" algorithm
* @link http://php.net/manual/en/arrayobject.natsort.php
*
2017-02-11 01:10:13 +01:00
* @return void
*
2017-02-11 01:10:13 +01:00
* @since 5.2.0
*/
public function natsort() { }
2017-02-11 01:10:13 +01:00
/**
* Sort an array using a case insensitive "natural order" algorithm
* @link http://php.net/manual/en/arrayobject.natcasesort.php
*
2017-02-11 01:10:13 +01:00
* @return void
*
2017-02-11 01:10:13 +01:00
* @since 5.2.0
*/
public function natcasesort() { }
2017-02-11 01:10:13 +01:00
/**
* Unserialize an ArrayObject
* @link http://php.net/manual/en/arrayobject.unserialize.php
*
* @param string $serialized The serialized ArrayObject
* @return void The unserialized ArrayObject
*
2017-02-11 01:10:13 +01:00
* @since 5.3.0
*/
public function unserialize($serialized) { }
2017-02-11 01:10:13 +01:00
/**
* Serialize an ArrayObject
* @link http://php.net/manual/en/arrayobject.serialize.php
*
* @return string The serialized representation of the ArrayObject.
*
2017-02-11 01:10:13 +01:00
* @since 5.3.0
*/
public function serialize() { }
2017-02-11 01:10:13 +01:00
/**
* Create a new iterator from an ArrayObject instance
* @link http://php.net/manual/en/arrayobject.getiterator.php
*
* @return ArrayIterator<TKey, TValue> An iterator from an ArrayObject.
*
2017-02-11 01:10:13 +01:00
* @since 5.0.0
*/
public function getIterator() { }
2017-02-11 01:10:13 +01:00
/**
* Exchange the array for another one.
* @link http://php.net/manual/en/arrayobject.exchangearray.php
*
* @param mixed $input The new array or object to exchange with the current array.
2017-02-11 01:10:13 +01:00
* @return array the old array.
*
2017-02-11 01:10:13 +01:00
* @since 5.1.0
*/
public function exchangeArray($input) { }
2017-02-11 01:10:13 +01:00
/**
* Sets the iterator classname for the ArrayObject.
* @link http://php.net/manual/en/arrayobject.setiteratorclass.php
*
* @param string $iterator_class The classname of the array iterator to use when iterating over this object.
* @psalm-param class-string<ArrayIterator<TKey,TValue>>|class-string<ArrayObject<TKey,TValue>> $iterator_class
2017-02-11 01:10:13 +01:00
* @return void
*
2017-02-11 01:10:13 +01:00
* @since 5.1.0
*/
public function setIteratorClass($iterator_class) { }
2017-02-11 01:10:13 +01:00
/**
* Gets the iterator classname for the ArrayObject.
* @link http://php.net/manual/en/arrayobject.getiteratorclass.php
*
2017-02-11 01:10:13 +01:00
* @return string the iterator class name that is used to iterate over this object.
* @psalm-return class-string<ArrayIterator<TKey,TValue>>|class-string<ArrayObject<TKey,TValue>>
*
2017-02-11 01:10:13 +01:00
* @since 5.1.0
*/
public function getIteratorClass() { }
}
2018-02-01 05:27:25 +01:00
2021-03-06 22:05:14 +01:00
interface Serializable {
/**
2021-09-16 13:07:32 +02:00
* @return null|string
*/
2021-03-06 22:05:14 +01:00
public function serialize();
/**
* @param string $data
* @return void
*/
public function unserialize($data);
2019-02-09 00:15:37 +01:00
}
2019-11-29 07:21:38 +01:00
/**
* @template-covariant T as object
*/
final class WeakReference
{
// always fail
2021-03-06 22:05:14 +01:00
public function __construct() {}
2019-11-29 07:21:38 +01:00
/**
* @template TIn as object
* @param TIn $object
2019-11-29 07:21:38 +01:00
* @return WeakReference<TIn>
*/
public static function create(object $object): WeakReference {}
2019-11-29 07:21:38 +01:00
/** @return ?T */
2021-03-06 22:05:14 +01:00
public function get(): ?object {}
}
2021-03-03 04:25:19 +01:00
/**
* @template TKey of object
* @template TVal of mixed
* @implements ArrayAccess<TKey, TVal>
* @implements IteratorAggregate<TKey,TVal>
* @implements Traversable<TKey,TVal>
*
* @since 8.0.0
*/
final class WeakMap implements ArrayAccess, Countable, IteratorAggregate, Traversable
{
/**
* @param TKey $offset
* @return bool
*/
public function offsetExists($offset) {}
/**
* @param TKey $offset
* @return TVal|null
* @psalm-ignore-nullable-return
*/
public function offsetGet($offset) {}
/**
* @param TKey $offset
* @param TVal $value
* @return void
*/
public function offsetSet($offset, $value) {}
/**
* @param TKey $offset
* @return void
*/
public function offsetUnset($offset) {}
}
class mysqli
{
/**
* @psalm-pure
*
* @psalm-taint-escape sql
* @psalm-flow ($string) -> return
*/
function escape_string($string) {}
/**
* @psalm-pure
*
* @psalm-taint-escape sql
* @psalm-flow ($string) -> return
*/
function real_escape_string($string) {}
}
class SQLite3
{
/**
* @psalm-pure
*
* @psalm-taint-escape sql
* @psalm-flow ($string) -> return
*/
static function escapeString($string) {}
}
#[Attribute(Attribute::TARGET_METHOD)]
final class ReturnTypeWillChange
{
public function __construct() {}
}
2023-04-20 09:05:12 +02:00
class DateInterval
{
/**
* Number of years
* @var int
* @readonly
*/
public $y;
/**
* Number of months
* @var int
* @readonly
*/
public $m;
/**
* Number of days
* @var int
* @readonly
*/
public $d;
/**
* Number of hours
* @var int
* @readonly
*/
public $h;
/**
* Number of minutes
* @var int
* @readonly
*/
public $i;
/**
* Number of seconds
* @var int
* @readonly
*/
public $s;
/**
* Number of microseconds
* @since 7.1.0
* @var float
* @readonly
*/
public $f;
/**
* Is 1 if the interval is inverted and 0 otherwise
* @var int
*/
public $invert;
/**
* Total number of days the interval spans. If this is unknown, days will be FALSE.
* @var int|false
* @readonly
*/
public $days;
/**
* @throws Exception when the $duration cannot be parsed as an interval.
* @link https://php.net/manual/en/dateinterval.construct.php
*/
public function __construct(string $duration = '') {}
/**
* Formats the interval
* @return string
* @link https://php.net/manual/en/dateinterval.format.php
* @psalm-pure
*/
public function format(string $format = ''): string {}
/**
* Sets up a DateInterval from the relative parts of the string
* @return DateInterval|false Returns a new {@link https://www.php.net/manual/en/class.dateinterval.php DateInterval}
* instance on success, or <b>FALSE</b> on failure.
* @link https://php.net/manual/en/dateinterval.createfromdatestring.php
* @psalm-ignore-falsable-return
*/
public static function createFromDateString(string $datetime = ''): DateInterval|false {}
}