1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- <?php
- declare(strict_types=1);
- /**
- * This file is part of Hyperf.
- *
- * @link https://www.hyperf.io
- * @document https://hyperf.wiki
- * @contact group@hyperf.io
- * @license https://github.com/hyperf/hyperf/blob/master/LICENSE
- */
- namespace Hyperf\Conditionable;
- use Closure;
- trait Conditionable
- {
- /**
- * Apply the callback if the given "value" is (or resolves to) truthy.
- *
- * @template TWhenParameter
- * @template TWhenReturnType
- *
- * @param null|(Closure($this): TWhenParameter)|TWhenParameter $value
- * @param null|(callable($this, TWhenParameter): TWhenReturnType) $callback
- * @param null|(callable($this, TWhenParameter): TWhenReturnType) $default
- * @param null|mixed $value
- * @return $this|TWhenReturnType
- */
- public function when($value = null, ?callable $callback = null, ?callable $default = null)
- {
- $value = $value instanceof Closure ? $value($this) : $value;
- if (func_num_args() === 0) {
- return new HigherOrderWhenProxy($this);
- }
- if (func_num_args() === 1) {
- return (new HigherOrderWhenProxy($this))->condition($value);
- }
- if ($value) {
- return $callback($this, $value) ?? $this;
- }
- if ($default) {
- return $default($this, $value) ?? $this;
- }
- return $this;
- }
- /**
- * Apply the callback if the given "value" is (or resolves to) falsy.
- *
- * @template TUnlessParameter
- * @template TUnlessReturnType
- *
- * @param null|(Closure($this): TUnlessParameter)|TUnlessParameter $value
- * @param null|(callable($this, TUnlessParameter): TUnlessReturnType) $callback
- * @param null|(callable($this, TUnlessParameter): TUnlessReturnType) $default
- * @param null|mixed $value
- * @return $this|TUnlessReturnType
- */
- public function unless($value = null, ?callable $callback = null, ?callable $default = null)
- {
- $value = $value instanceof Closure ? $value($this) : $value;
- if (func_num_args() === 0) {
- return (new HigherOrderWhenProxy($this))->negateConditionOnCapture();
- }
- if (func_num_args() === 1) {
- return (new HigherOrderWhenProxy($this))->condition(! $value);
- }
- if (! $value) {
- return $callback($this, $value) ?? $this;
- }
- if ($default) {
- return $default($this, $value) ?? $this;
- }
- return $this;
- }
- }
|