améliorations func
This commit is contained in:
parent
a8d55d329a
commit
1536e091fb
@ -3,13 +3,16 @@ namespace nulib\php;
|
||||
|
||||
use Closure;
|
||||
use Exception;
|
||||
use Generator;
|
||||
use nulib\A;
|
||||
use nulib\cl;
|
||||
use nulib\cv;
|
||||
use nulib\StateException;
|
||||
use nulib\ValueException;
|
||||
use ReflectionClass;
|
||||
use ReflectionFunction;
|
||||
use ReflectionMethod;
|
||||
use Traversable;
|
||||
|
||||
/**
|
||||
* Class func: outils pour appeler fonctions et méthodes dynamiquement
|
||||
@ -491,6 +494,34 @@ class func {
|
||||
return self::with($func)->invoke($args);
|
||||
}
|
||||
|
||||
/**
|
||||
* si $value est une fonction, l'appeler
|
||||
* si $value ou le résultat de l'appel est un Traversable, le résoudre
|
||||
* sinon retourner $value tel quel
|
||||
*
|
||||
* en définitive, la valeur de retour de cette fonction est soit un scalaire,
|
||||
* soit un array, soit un objet qui n'est pas Traversable
|
||||
* @return mixed
|
||||
*/
|
||||
static function get_value($value, ...$args) {
|
||||
if ($value instanceof self) $value = $value->invoke($args);
|
||||
elseif (is_callable($value)) $value = self::call($value, ...$args);
|
||||
if ($value instanceof Traversable) $value = cl::all($value);
|
||||
return $value;
|
||||
}
|
||||
|
||||
/**
|
||||
* si $value est une fonction, l'appeler
|
||||
* si $value ou le résultat de l'appel est un Traversable, le retourner
|
||||
* sinon retourner $value en tant qu'array
|
||||
*/
|
||||
static function get_iterable($value, ...$args): ?iterable {
|
||||
if ($value instanceof self) $value = $value->invoke($args);
|
||||
elseif (is_callable($value)) $value = self::call($value, ...$args);
|
||||
if ($value instanceof Traversable) return $value;
|
||||
else return cl::withn($value);
|
||||
}
|
||||
|
||||
#############################################################################
|
||||
|
||||
protected function __construct(int $type, $func, ?array $args=null, bool $bound=false, ?string $reason=null) {
|
||||
|
Loading…
Reference in New Issue
Block a user