HigherOrderWhenProxy.php
TLDR
The HigherOrderWhenProxy
class is a proxy class that allows conditionally performing operations on a target. It can proxy attribute access and method calls to the target. The proxy can be given a condition and the operations will be performed based on the condition.
Classes
Class: HigherOrderWhenProxy
The HigherOrderWhenProxy
class is a proxy class that allows conditionally performing operations on a target.
It has the following properties:
-
$target
(mixed): The target being conditionally operated on. -
$condition
(bool): The condition for proxying. -
$hasCondition
(bool): Indicates whether the proxy has a condition. -
$negateConditionOnCapture
(bool): Determine whether the condition should be negated.
It has the following methods:
-
__construct($target)
: Create a new proxy instance. -
condition($condition)
: Set the condition on the proxy. -
negateConditionOnCapture()
: Indicate that the condition should be negated. -
__get($key)
: Proxy accessing an attribute onto the target. -
__call($method, $parameters)
: Proxy a method call on the target.
<?php
namespace Illuminate\Support;
class HigherOrderWhenProxy
{
/**
* The target being conditionally operated on.
*
* @var mixed
*/
protected $target;
/**
* The condition for proxying.
*
* @var bool
*/
protected $condition;
/**
* Indicates whether the proxy has a condition.
*
* @var bool
*/
protected $hasCondition = false;
/**
* Determine whether the condition should be negated.
*
* @var bool
*/
protected $negateConditionOnCapture;
/**
* Create a new proxy instance.
*
* @param mixed $target
* @return void
*/
public function __construct($target)
{
$this->target = $target;
}
/**
* Set the condition on the proxy.
*
* @param bool $condition
* @return $this
*/
public function condition($condition)
{
[$this->condition, $this->hasCondition] = [$condition, true];
return $this;
}
/**
* Indicate that the condition should be negated.
*
* @return $this
*/
public function negateConditionOnCapture()
{
$this->negateConditionOnCapture = true;
return $this;
}
/**
* Proxy accessing an attribute onto the target.
*
* @param string $key
* @return mixed
*/
public function __get($key)
{
if (! $this->hasCondition) {
$condition = $this->target->{$key};
return $this->condition($this->negateConditionOnCapture ? ! $condition : $condition);
}
return $this->condition
? $this->target->{$key}
: $this->target;
}
/**
* Proxy a method call on the target.
*
* @param string $method
* @param array $parameters
* @return mixed
*/
public function __call($method, $parameters)
{
if (! $this->hasCondition) {
$condition = $this->target->{$method}(...$parameters);
return $this->condition($this->negateConditionOnCapture ? ! $condition : $condition);
}
return $this->condition
? $this->target->{$method}(...$parameters)
: $this->target;
}
}