123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279 |
- <?php
- // +----------------------------------------------------------------------
- // | ThinkPHP [ WE CAN DO IT JUST THINK IT ]
- // +----------------------------------------------------------------------
- // | Copyright (c) 2006-2016 http://thinkphp.cn All rights reserved.
- // +----------------------------------------------------------------------
- // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
- // +----------------------------------------------------------------------
- // | Author: yunwuxin <448901948@qq.com>
- // +----------------------------------------------------------------------
- use think\Collection;
- use think\helper\Arr;
- if (!function_exists('throw_if')) {
- /**
- * 按条件抛异常
- *
- * @param mixed $condition
- * @param Throwable|string $exception
- * @param array ...$parameters
- * @return mixed
- *
- * @throws Throwable
- */
- function throw_if($condition, $exception, ...$parameters)
- {
- if ($condition) {
- throw (is_string($exception) ? new $exception(...$parameters) : $exception);
- }
- return $condition;
- }
- }
- if (!function_exists('throw_unless')) {
- /**
- * 按条件抛异常
- *
- * @param mixed $condition
- * @param Throwable|string $exception
- * @param array ...$parameters
- * @return mixed
- * @throws Throwable
- */
- function throw_unless($condition, $exception, ...$parameters)
- {
- if (!$condition) {
- throw (is_string($exception) ? new $exception(...$parameters) : $exception);
- }
- return $condition;
- }
- }
- if (!function_exists('tap')) {
- /**
- * 对一个值调用给定的闭包,然后返回该值
- *
- * @param mixed $value
- * @param callable|null $callback
- * @return mixed
- */
- function tap($value, $callback = null)
- {
- if (is_null($callback)) {
- return $value;
- }
- $callback($value);
- return $value;
- }
- }
- if (!function_exists('value')) {
- /**
- * Return the default value of the given value.
- *
- * @param mixed $value
- * @return mixed
- */
- function value($value)
- {
- return $value instanceof Closure ? $value() : $value;
- }
- }
- if (!function_exists('collect')) {
- /**
- * Create a collection from the given value.
- *
- * @param mixed $value
- * @return Collection
- */
- function collect($value = null)
- {
- return new Collection($value);
- }
- }
- if (!function_exists('data_fill')) {
- /**
- * Fill in data where it's missing.
- *
- * @param mixed $target
- * @param string|array $key
- * @param mixed $value
- * @return mixed
- */
- function data_fill(&$target, $key, $value)
- {
- return data_set($target, $key, $value, false);
- }
- }
- if (!function_exists('data_get')) {
- /**
- * Get an item from an array or object using "dot" notation.
- *
- * @param mixed $target
- * @param string|array|int $key
- * @param mixed $default
- * @return mixed
- */
- function data_get($target, $key, $default = null)
- {
- if (is_null($key)) {
- return $target;
- }
- $key = is_array($key) ? $key : explode('.', $key);
- while (!is_null($segment = array_shift($key))) {
- if ('*' === $segment) {
- if ($target instanceof Collection) {
- $target = $target->all();
- } elseif (!is_array($target)) {
- return value($default);
- }
- $result = [];
- foreach ($target as $item) {
- $result[] = data_get($item, $key);
- }
- return in_array('*', $key) ? Arr::collapse($result) : $result;
- }
- if (Arr::accessible($target) && Arr::exists($target, $segment)) {
- $target = $target[$segment];
- } elseif (is_object($target) && isset($target->{$segment})) {
- $target = $target->{$segment};
- } else {
- return value($default);
- }
- }
- return $target;
- }
- }
- if (!function_exists('data_set')) {
- /**
- * Set an item on an array or object using dot notation.
- *
- * @param mixed $target
- * @param string|array $key
- * @param mixed $value
- * @param bool $overwrite
- * @return mixed
- */
- function data_set(&$target, $key, $value, $overwrite = true)
- {
- $segments = is_array($key) ? $key : explode('.', $key);
- if (($segment = array_shift($segments)) === '*') {
- if (!Arr::accessible($target)) {
- $target = [];
- }
- if ($segments) {
- foreach ($target as &$inner) {
- data_set($inner, $segments, $value, $overwrite);
- }
- } elseif ($overwrite) {
- foreach ($target as &$inner) {
- $inner = $value;
- }
- }
- } elseif (Arr::accessible($target)) {
- if ($segments) {
- if (!Arr::exists($target, $segment)) {
- $target[$segment] = [];
- }
- data_set($target[$segment], $segments, $value, $overwrite);
- } elseif ($overwrite || !Arr::exists($target, $segment)) {
- $target[$segment] = $value;
- }
- } elseif (is_object($target)) {
- if ($segments) {
- if (!isset($target->{$segment})) {
- $target->{$segment} = [];
- }
- data_set($target->{$segment}, $segments, $value, $overwrite);
- } elseif ($overwrite || !isset($target->{$segment})) {
- $target->{$segment} = $value;
- }
- } else {
- $target = [];
- if ($segments) {
- data_set($target[$segment], $segments, $value, $overwrite);
- } elseif ($overwrite) {
- $target[$segment] = $value;
- }
- }
- return $target;
- }
- }
- if (!function_exists('trait_uses_recursive')) {
- /**
- * 获取一个trait里所有引用到的trait
- *
- * @param string $trait Trait
- * @return array
- */
- function trait_uses_recursive(string $trait): array
- {
- $traits = class_uses($trait);
- foreach ($traits as $trait) {
- $traits += trait_uses_recursive($trait);
- }
- return $traits;
- }
- }
- if (!function_exists('class_basename')) {
- /**
- * 获取类名(不包含命名空间)
- *
- * @param mixed $class 类名
- * @return string
- */
- function class_basename($class): string
- {
- $class = is_object($class) ? get_class($class) : $class;
- return basename(str_replace('\\', '/', $class));
- }
- }
- if (!function_exists('class_uses_recursive')) {
- /**
- *获取一个类里所有用到的trait,包括父类的
- *
- * @param mixed $class 类名
- * @return array
- */
- function class_uses_recursive($class): array
- {
- if (is_object($class)) {
- $class = get_class($class);
- }
- $results = [];
- $classes = array_merge([$class => $class], class_parents($class));
- foreach ($classes as $class) {
- $results += trait_uses_recursive($class);
- }
- return array_unique($results);
- }
- }
|