Вход Регистрация
Файл: vendor/laravel/framework/src/Illuminate/Support/Fluent.php
Строк: 263
<?php

namespace IlluminateSupport;

use 
ArrayAccess;
use 
ArrayIterator;
use 
IlluminateContractsSupportArrayable;
use 
IlluminateContractsSupportJsonable;
use 
IlluminateSupportTraitsConditionable;
use 
IlluminateSupportTraitsInteractsWithData;
use 
IlluminateSupportTraitsMacroable;
use 
IteratorAggregate;
use 
JsonSerializable;
use 
Traversable;

/**
 * @template TKey of array-key
 * @template TValue
 *
 * @implements IlluminateContractsSupportArrayable<TKey, TValue>
 * @implements ArrayAccess<TKey, TValue>
 */
class Fluent implements ArrayableArrayAccessIteratorAggregateJsonableJsonSerializable
{
    use 
ConditionableInteractsWithDataMacroable {
        
__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<TKey, TValue>
     */
    
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$keyArr::get($data$key));
        }

        return 
$results;
    }

    
/**
     * Get data from the fluent instance.
     *
     * @param  string|null  $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.
     *
     * @param  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) > 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);
    }
}
Онлайн: 0
Реклама