60 lines
2.3 KiB
PHP
60 lines
2.3 KiB
PHP
|
<?php
|
||
|
namespace nur;
|
||
|
|
||
|
use nur\data\types\IType;
|
||
|
use nur\data\types\PhpIncarnation;
|
||
|
|
||
|
/**
|
||
|
* Class types: gestion de types de valeurs
|
||
|
*/
|
||
|
class types {
|
||
|
const MANAGER_CLASS = PhpIncarnation::class;
|
||
|
|
||
|
protected static $manager_class;
|
||
|
|
||
|
/**
|
||
|
* spécifier la classe à utiliser pour instancier le gestionnaire
|
||
|
* de types
|
||
|
*
|
||
|
* cette méthode *doit* être appelée avant d'appeler la méthode
|
||
|
* {@link manager()}
|
||
|
*/
|
||
|
static final function set_manager_class(string $manager_class) {
|
||
|
self::$manager_class = $manager_class;
|
||
|
}
|
||
|
|
||
|
/** @var PhpIncarnation */
|
||
|
protected static $manager;
|
||
|
|
||
|
static final function set_manager(PhpIncarnation $manager) {
|
||
|
self::$manager = $manager;
|
||
|
}
|
||
|
|
||
|
/** obtenir l'instance globale de gestionnaire de types */
|
||
|
static final function manager(): PhpIncarnation {
|
||
|
if (self::$manager === null) {
|
||
|
$manager_class = self::$manager_class;
|
||
|
if ($manager_class === null) $manager_class = static::MANAGER_CLASS;
|
||
|
self::$manager = new $manager_class();
|
||
|
}
|
||
|
return self::$manager;
|
||
|
}
|
||
|
|
||
|
static final function __callStatic($name, $args) {
|
||
|
$name = str::us2camel($name);
|
||
|
return call_user_func_array([self::$manager, $name], $args);
|
||
|
}
|
||
|
|
||
|
#############################################################################
|
||
|
|
||
|
static final function get($name, bool $required=true): ?IType { return self::manager()->getType($name, $required); }
|
||
|
static final function add($typeOrClass, ?string $name=null): void { self::manager()->addType($typeOrClass, $name); }
|
||
|
static final function is_instance($type, $value): bool { return self::manager()->getType($type)->isInstance($value); }
|
||
|
static final function can_format($type): bool { return self::manager()->getType($type)->canFormat(); }
|
||
|
static final function format($type, $value): string { return self::manager()->getType($type)->format($value); }
|
||
|
static final function can_parse($type): bool { return self::manager()->getType($type)->canParse(); }
|
||
|
static final function parse($type, string &$input) { return self::manager()->getType($type)->parse($input); }
|
||
|
static final function verifix($type, &$value, array &$result=null, bool $throw=false): bool { return self::manager()->getType($type)->verifix($value, $result, $throw); }
|
||
|
static final function with($type, $value) { return self::manager()->getType($type)->with($value); }
|
||
|
}
|