From 1536e091fb0020858204f59462a7a80b5f9775d9 Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Thu, 3 Apr 2025 06:22:29 +0400 Subject: [PATCH] =?UTF-8?q?am=C3=A9liorations=20func?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- php/src/php/func.php | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/php/src/php/func.php b/php/src/php/func.php index 63ea334..133fd5f 100644 --- a/php/src/php/func.php +++ b/php/src/php/func.php @@ -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) {