améliorations func
This commit is contained in:
parent
a8d55d329a
commit
1536e091fb
@ -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) {
|
||||||
|
Loading…
Reference in New Issue
Block a user