Fluent.php
TLDR
The Fluent.php
file in the Illuminate\Support
namespace defines a class called Fluent
. This class implements several interfaces (Arrayable
, ArrayAccess
, Jsonable
, and JsonSerializable
) and provides methods for retrieving and manipulating attribute values in a fluent manner.
Methods
get
This method retrieves an attribute value from the Fluent
instance using "dot" notation. It accepts a key and an optional default value to return if the key is not found.
value
This method retrieves an attribute value from the Fluent
instance. It accepts a key and an optional default value to return if the key is not found.
scope
This method retrieves the value of the given key as a new Fluent
instance. It accepts a key and an optional default value to return if the key is not found.
getAttributes
This method returns an array of all the attributes set on the Fluent
instance.
toArray
This method converts the Fluent
instance to an array.
collect
This method converts the Fluent
instance to a Collection
object. It accepts an optional key parameter.
jsonSerialize
This method converts the Fluent
instance to something JSON serializable.
toJson
This method converts the Fluent
instance to JSON.
offsetExists
This method determines if the given offset exists in the Fluent
instance.
offsetGet
This method retrieves the value for a given offset in the Fluent
instance.
offsetSet
This method sets the value at the given offset in the Fluent
instance.
offsetUnset
This method unsets the value at the given offset in the Fluent
instance.
__call
This magic method allows for dynamic calls to the Fluent
instance to set attributes.
__get
This magic method allows for dynamically retrieving the value of an attribute from the Fluent
instance.
__set
This magic method allows for dynamically setting the value of an attribute in the Fluent
instance.
__isset
This magic method allows for dynamically checking if an attribute is set in the Fluent
instance.
__unset
This magic method allows for dynamically unsetting an attribute in the Fluent
instance.
Classes
No classes are defined in this file.
<?php
namespace Illuminate\Support;
use ArrayAccess;
use Illuminate\Contracts\Support\Arrayable;
use Illuminate\Contracts\Support\Jsonable;
use JsonSerializable;
/**
* @template TKey of array-key
* @template TValue
*
* @implements \Illuminate\Contracts\Support\Arrayable<TKey, TValue>
* @implements \ArrayAccess<TKey, TValue>
*/
class Fluent implements Arrayable, ArrayAccess, Jsonable, JsonSerializable
{
/**
* 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
* @return void
*/
public function __construct($attributes = [])
{
foreach ($attributes as $key => $value) {
$this->attributes[$key] = $value;
}
}
/**
* 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);
}
/**
* 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 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 fluent instance to a Collection.
*
* @param string|null $key
* @return \Illuminate\Support\Collection
*/
public function collect($key = null)
{
return new Collection($this->get($key));
}
/**
* 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);
}
/**
* 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]);
}
/**
* 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)
{
$this->attributes[$method] = count($parameters) > 0 ? reset($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);
}
}