améliorations func

This commit is contained in:
Jephté Clain 2025-04-03 06:22:29 +04:00
parent a8d55d329a
commit 1536e091fb

View File

@ -3,13 +3,16 @@ namespace nulib\php;
use Closure; use Closure;
use Exception; use Exception;
use Generator;
use nulib\A; use nulib\A;
use nulib\cl;
use nulib\cv; use nulib\cv;
use nulib\StateException; use nulib\StateException;
use nulib\ValueException; use nulib\ValueException;
use ReflectionClass; use ReflectionClass;
use ReflectionFunction; use ReflectionFunction;
use ReflectionMethod; use ReflectionMethod;
use Traversable;
/** /**
* Class func: outils pour appeler fonctions et méthodes dynamiquement * Class func: outils pour appeler fonctions et méthodes dynamiquement
@ -491,6 +494,34 @@ class func {
return self::with($func)->invoke($args); 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) { protected function __construct(int $type, $func, ?array $args=null, bool $bound=false, ?string $reason=null) {