Viewing file: Fluent.php (7.46 KB) -rwxr-xr-x Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
namespace Illuminate\Support;
use ArrayAccess; use ArrayIterator; use Illuminate\Contracts\Support\Arrayable; use Illuminate\Contracts\Support\Jsonable; use Illuminate\Support\Traits\Conditionable; use Illuminate\Support\Traits\InteractsWithData; use Illuminate\Support\Traits\Macroable; use IteratorAggregate; use JsonSerializable; use Traversable;
/** * @template TKey of array-key * @template TValue * * @implements \Illuminate\Contracts\Support\Arrayable<TKey, TValue> * @implements \ArrayAccess<TKey, TValue> */ class Fluent implements Arrayable, ArrayAccess, IteratorAggregate, Jsonable, JsonSerializable { use Conditionable, InteractsWithData, Macroable { __call as macroCall; }
/** * All of the attributes set on the fluent instance. * * @var array<TKey, TValue> */ protected $attributes = [];
/** * Create a new fluent instance. * * @param iterable<TKey, TValue> $attributes */ public function __construct($attributes = []) { $this->fill($attributes); }
/** * Create a new fluent instance. * * @param iterable<TKey, TValue> $attributes * @return static */ public static function make($attributes = []) { return new static($attributes); }
/** * Get an attribute from the fluent instance using "dot" notation. * * @template TGetDefault * * @param TKey $key * @param TGetDefault|(\Closure(): TGetDefault) $default * @return TValue|TGetDefault */ public function get($key, $default = null) { return data_get($this->attributes, $key, $default); }
/** * Set an attribute on the fluent instance using "dot" notation. * * @param TKey $key * @param TValue $value * @return $this */ public function set($key, $value) { data_set($this->attributes, $key, $value);
return $this; }
/** * Fill the fluent instance with an array of attributes. * * @param iterable<TKey, TValue> $attributes * @return $this */ public function fill($attributes) { foreach ($attributes as $key => $value) { $this->attributes[$key] = $value; }
return $this; }
/** * Get an attribute from the fluent instance. * * @param string $key * @param mixed $default * @return mixed */ public function value($key, $default = null) { if (array_key_exists($key, $this->attributes)) { return $this->attributes[$key]; }
return value($default); }
/** * Get the value of the given key as a new Fluent instance. * * @param string $key * @param mixed $default * @return static */ public function scope($key, $default = null) { return new static( (array) $this->get($key, $default) ); }
/** * Get all of the attributes from the fluent instance. * * @param mixed $keys * @return array */ public function all($keys = null) { $data = $this->data();
if (! $keys) { return $data; }
$results = [];
foreach (is_array($keys) ? $keys : func_get_args() as $key) { Arr::set($results, $key, Arr::get($data, $key)); }
return $results; }
/** * Get data from the fluent instance. * * @param string $key * @param mixed $default * @return mixed */ protected function data($key = null, $default = null) { return $this->get($key, $default); }
/** * Get the attributes from the fluent instance. * * @return array<TKey, TValue> */ public function getAttributes() { return $this->attributes; }
/** * Convert the fluent instance to an array. * * @return array<TKey, TValue> */ public function toArray() { return $this->attributes; }
/** * Convert the object into something JSON serializable. * * @return array<TKey, TValue> */ public function jsonSerialize(): array { return $this->toArray(); }
/** * Convert the fluent instance to JSON. * * @param int $options * @return string */ public function toJson($options = 0) { return json_encode($this->jsonSerialize(), $options); }
/** * Convert the fluent instance to pretty print formatted JSON. * * @params int $options * * @return string */ public function toPrettyJson(int $options = 0) { return $this->toJson(JSON_PRETTY_PRINT | $options); }
/** * Determine if the fluent instance is empty. * * @return bool */ public function isEmpty(): bool { return empty($this->attributes); }
/** * Determine if the fluent instance is not empty. * * @return bool */ public function isNotEmpty(): bool { return ! $this->isEmpty(); }
/** * Determine if the given offset exists. * * @param TKey $offset * @return bool */ public function offsetExists($offset): bool { return isset($this->attributes[$offset]); }
/** * Get the value for a given offset. * * @param TKey $offset * @return TValue|null */ public function offsetGet($offset): mixed { return $this->value($offset); }
/** * Set the value at the given offset. * * @param TKey $offset * @param TValue $value * @return void */ public function offsetSet($offset, $value): void { $this->attributes[$offset] = $value; }
/** * Unset the value at the given offset. * * @param TKey $offset * @return void */ public function offsetUnset($offset): void { unset($this->attributes[$offset]); }
/** * Get an iterator for the attributes. * * @return ArrayIterator<TKey, TValue> */ public function getIterator(): Traversable { return new ArrayIterator($this->attributes); }
/** * Handle dynamic calls to the fluent instance to set attributes. * * @param TKey $method * @param array{0: ?TValue} $parameters * @return $this */ public function __call($method, $parameters) { if (static::hasMacro($method)) { return $this->macroCall($method, $parameters); }
$this->attributes[$method] = count($parameters) > 0 ? array_first($parameters) : true;
return $this; }
/** * Dynamically retrieve the value of an attribute. * * @param TKey $key * @return TValue|null */ public function __get($key) { return $this->value($key); }
/** * Dynamically set the value of an attribute. * * @param TKey $key * @param TValue $value * @return void */ public function __set($key, $value) { $this->offsetSet($key, $value); }
/** * Dynamically check if an attribute is set. * * @param TKey $key * @return bool */ public function __isset($key) { return $this->offsetExists($key); }
/** * Dynamically unset an attribute. * * @param TKey $key * @return void */ public function __unset($key) { $this->offsetUnset($key); } }
|