items = $items; } /** * Get an iterator for the items. * * @return \ArrayIterator */ public function getIterator() { return new ArrayIterator($this->items); } /** * Create a new collection instance if the value isn't one already. * * @param mixed $items * * @return static */ public static function make($items) { if (is_null($items)) { return new static; } if ($items instanceof Collection) { return $items; } return new static(is_array($items) ? $items : [$items]); } /** * Get the first item from the collection. * * @return mixed|null */ public function first() { return count($this->items) > 0 ? reset($this->items) : null; } /** * Get the collection of items as a plain array. * * @return array */ public function toArray() { return array_map( function ($value) { return $value instanceof Entity ? $value->toArray() : $value; }, $this->items ); } /** * Count the number of items in the collection. * * @return int */ public function count() { return count($this->items); } /** * Determine if an item exists at an offset. * * @param mixed $key * * @return bool */ public function offsetExists($key) { return array_key_exists($key, $this->items); } /** * Get an item at a given offset. * * @param mixed $key * * @return mixed */ public function offsetGet($key) { return $this->items[$key]; } /** * Set the item at a given offset. * * @param mixed $key * @param mixed $value * * @return void */ public function offsetSet($key, $value) { if (is_null($key)) { $this->items[] = $value; } else { $this->items[$key] = $value; } } /** * Unset the item at a given offset. * * @param string $key * * @return void */ public function offsetUnset($key) { unset($this->items[$key]); } }