ordered map that can also be used * like a list. * * A Collection has an internal iterator just like a PHP array. In addition, * a Collection can be iterated with external iterators, which is preferable. * To use an external iterator simply use the foreach language construct to * iterate over the collection (which calls {@link getIterator()} internally) or * explicitly retrieve an iterator though {@link getIterator()} which can then be * used to iterate over the collection. * You can not rely on the internal iterator of the collection being at a certain * position unless you explicitly positioned it before. Prefer iteration with * external iterators. * * @psalm-template TKey of array-key * @psalm-template T * @template-extends ReadableCollection * @template-extends ArrayAccess */ interface Collection extends ReadableCollection, ArrayAccess { /** * Adds an element at the end of the collection. * * @param mixed $element The element to add. * @psalm-param T $element * * @return void we will require a native return type declaration in 3.0 */ public function add(mixed $element); /** * Clears the collection, removing all elements. * * @return void */ public function clear(); /** * Removes the element at the specified index from the collection. * * @param string|int $key The key/index of the element to remove. * @psalm-param TKey $key * * @return mixed The removed element or NULL, if the collection did not contain the element. * @psalm-return T|null */ public function remove(string|int $key); /** * Removes the specified element from the collection, if it is found. * * @param mixed $element The element to remove. * @psalm-param T $element * * @return bool TRUE if this collection contained the specified element, FALSE otherwise. */ public function removeElement(mixed $element); /** * Sets an element in the collection at the specified key/index. * * @param string|int $key The key/index of the element to set. * @param mixed $value The element to set. * @psalm-param TKey $key * @psalm-param T $value * * @return void */ public function set(string|int $key, mixed $value); /** * {@inheritDoc} * * @psalm-param Closure(T):U $func * * @return Collection * @psalm-return Collection * * @psalm-template U */ public function map(Closure $func); /** * {@inheritDoc} * * @psalm-param Closure(T, TKey):bool $p * * @return Collection A collection with the results of the filter operation. * @psalm-return Collection */ public function filter(Closure $p); /** * {@inheritDoc} * * @psalm-param Closure(TKey, T):bool $p * * @return Collection[] An array with two elements. The first element contains the collection * of elements where the predicate returned TRUE, the second element * contains the collection of elements where the predicate returned FALSE. * @psalm-return array{0: Collection, 1: Collection} */ public function partition(Closure $p); }