194 lines
3.2 KiB
PHP
194 lines
3.2 KiB
PHP
|
<?php namespace Illuminate\Support;
|
||
|
|
||
|
use ArrayAccess;
|
||
|
use JsonSerializable;
|
||
|
use Illuminate\Contracts\Support\Jsonable;
|
||
|
use Illuminate\Contracts\Support\Arrayable;
|
||
|
|
||
|
class Fluent implements ArrayAccess, Arrayable, Jsonable, JsonSerializable {
|
||
|
|
||
|
/**
|
||
|
* All of the attributes set on the container.
|
||
|
*
|
||
|
* @var array
|
||
|
*/
|
||
|
protected $attributes = array();
|
||
|
|
||
|
/**
|
||
|
* Create a new fluent container instance.
|
||
|
*
|
||
|
* @param array|object $attributes
|
||
|
* @return void
|
||
|
*/
|
||
|
public function __construct($attributes = array())
|
||
|
{
|
||
|
foreach ($attributes as $key => $value)
|
||
|
{
|
||
|
$this->attributes[$key] = $value;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get an attribute from the container.
|
||
|
*
|
||
|
* @param string $key
|
||
|
* @param mixed $default
|
||
|
* @return mixed
|
||
|
*/
|
||
|
public function get($key, $default = null)
|
||
|
{
|
||
|
if (array_key_exists($key, $this->attributes))
|
||
|
{
|
||
|
return $this->attributes[$key];
|
||
|
}
|
||
|
|
||
|
return value($default);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get the attributes from the container.
|
||
|
*
|
||
|
* @return array
|
||
|
*/
|
||
|
public function getAttributes()
|
||
|
{
|
||
|
return $this->attributes;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Convert the Fluent instance to an array.
|
||
|
*
|
||
|
* @return array
|
||
|
*/
|
||
|
public function toArray()
|
||
|
{
|
||
|
return $this->attributes;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Convert the object into something JSON serializable.
|
||
|
*
|
||
|
* @return array
|
||
|
*/
|
||
|
public function jsonSerialize()
|
||
|
{
|
||
|
return $this->toArray();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Convert the Fluent instance to JSON.
|
||
|
*
|
||
|
* @param int $options
|
||
|
* @return string
|
||
|
*/
|
||
|
public function toJson($options = 0)
|
||
|
{
|
||
|
return json_encode($this->toArray(), $options);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Determine if the given offset exists.
|
||
|
*
|
||
|
* @param string $offset
|
||
|
* @return bool
|
||
|
*/
|
||
|
public function offsetExists($offset)
|
||
|
{
|
||
|
return isset($this->{$offset});
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get the value for a given offset.
|
||
|
*
|
||
|
* @param string $offset
|
||
|
* @return mixed
|
||
|
*/
|
||
|
public function offsetGet($offset)
|
||
|
{
|
||
|
return $this->{$offset};
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Set the value at the given offset.
|
||
|
*
|
||
|
* @param string $offset
|
||
|
* @param mixed $value
|
||
|
* @return void
|
||
|
*/
|
||
|
public function offsetSet($offset, $value)
|
||
|
{
|
||
|
$this->{$offset} = $value;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Unset the value at the given offset.
|
||
|
*
|
||
|
* @param string $offset
|
||
|
* @return void
|
||
|
*/
|
||
|
public function offsetUnset($offset)
|
||
|
{
|
||
|
unset($this->{$offset});
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Handle dynamic calls to the container to set attributes.
|
||
|
*
|
||
|
* @param string $method
|
||
|
* @param array $parameters
|
||
|
* @return $this
|
||
|
*/
|
||
|
public function __call($method, $parameters)
|
||
|
{
|
||
|
$this->attributes[$method] = count($parameters) > 0 ? $parameters[0] : true;
|
||
|
|
||
|
return $this;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Dynamically retrieve the value of an attribute.
|
||
|
*
|
||
|
* @param string $key
|
||
|
* @return mixed
|
||
|
*/
|
||
|
public function __get($key)
|
||
|
{
|
||
|
return $this->get($key);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Dynamically set the value of an attribute.
|
||
|
*
|
||
|
* @param string $key
|
||
|
* @param mixed $value
|
||
|
* @return void
|
||
|
*/
|
||
|
public function __set($key, $value)
|
||
|
{
|
||
|
$this->attributes[$key] = $value;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Dynamically check if an attribute is set.
|
||
|
*
|
||
|
* @param string $key
|
||
|
* @return void
|
||
|
*/
|
||
|
public function __isset($key)
|
||
|
{
|
||
|
return isset($this->attributes[$key]);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Dynamically unset an attribute.
|
||
|
*
|
||
|
* @param string $key
|
||
|
* @return void
|
||
|
*/
|
||
|
public function __unset($key)
|
||
|
{
|
||
|
unset($this->attributes[$key]);
|
||
|
}
|
||
|
|
||
|
}
|