modifs.mineures sans commentaires
This commit is contained in:
		
							parent
							
								
									48941f9f90
								
							
						
					
					
						commit
						1b8b3cf27f
					
				| @ -218,10 +218,10 @@ class A { | ||||
|   static final function filter_f($dest): void { self::filter_if($dest, [cv::class, "f"]);} | ||||
|   static final function filter_pt($dest): void { self::filter_if($dest, [cv::class, "pt"]);} | ||||
|   static final function filter_pf($dest): void { self::filter_if($dest, [cv::class, "pf"]);} | ||||
|   static final function filter_equals($dest, $value): void { self::filter_if($dest, cv::equals($value)); } | ||||
|   static final function filter_not_equals($dest, $value): void { self::filter_if($dest, cv::not_equals($value)); } | ||||
|   static final function filter_same($dest, $value): void { self::filter_if($dest, cv::same($value)); } | ||||
|   static final function filter_not_same($dest, $value): void { self::filter_if($dest, cv::not_same($value)); } | ||||
|   static final function filter_equals($dest, $value): void { self::filter_if($dest, cv::Fequals($value)); } | ||||
|   static final function filter_not_equals($dest, $value): void { self::filter_if($dest, cv::Fnot_equals($value)); } | ||||
|   static final function filter_same($dest, $value): void { self::filter_if($dest, cv::Fsame($value)); } | ||||
|   static final function filter_not_same($dest, $value): void { self::filter_if($dest, cv::Fnot_same($value)); } | ||||
| 
 | ||||
|   #############################################################################
 | ||||
| 
 | ||||
|  | ||||
| @ -817,10 +817,10 @@ class cl { | ||||
|   static final function all_f(?array $array): bool { return self::all_if($array, [cv::class, "f"]);} | ||||
|   static final function all_pt(?array $array): bool { return self::all_if($array, [cv::class, "pt"]);} | ||||
|   static final function all_pf(?array $array): bool { return self::all_if($array, [cv::class, "pf"]);} | ||||
|   static final function all_equals(?array $array, $value): bool { return self::all_if($array, cv::equals($value)); } | ||||
|   static final function all_not_equals(?array $array, $value): bool { return self::all_if($array, cv::not_equals($value)); } | ||||
|   static final function all_same(?array $array, $value): bool { return self::all_if($array, cv::same($value)); } | ||||
|   static final function all_not_same(?array $array, $value): bool { return self::all_if($array, cv::not_same($value)); } | ||||
|   static final function all_equals(?array $array, $value): bool { return self::all_if($array, cv::Fequals($value)); } | ||||
|   static final function all_not_equals(?array $array, $value): bool { return self::all_if($array, cv::Fnot_equals($value)); } | ||||
|   static final function all_same(?array $array, $value): bool { return self::all_if($array, cv::Fsame($value)); } | ||||
|   static final function all_not_same(?array $array, $value): bool { return self::all_if($array, cv::Fnot_same($value)); } | ||||
| 
 | ||||
|   #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 | ||||
| 
 | ||||
| @ -842,10 +842,10 @@ class cl { | ||||
|   static final function any_f(?array $array): bool { return self::any_if($array, [cv::class, "f"]);} | ||||
|   static final function any_pt(?array $array): bool { return self::any_if($array, [cv::class, "pt"]);} | ||||
|   static final function any_pf(?array $array): bool { return self::any_if($array, [cv::class, "pf"]);} | ||||
|   static final function any_equals(?array $array, $value): bool { return self::any_if($array, cv::equals($value)); } | ||||
|   static final function any_not_equals(?array $array, $value): bool { return self::any_if($array, cv::not_equals($value)); } | ||||
|   static final function any_same(?array $array, $value): bool { return self::any_if($array, cv::same($value)); } | ||||
|   static final function any_not_same(?array $array, $value): bool { return self::any_if($array, cv::not_same($value)); } | ||||
|   static final function any_equals(?array $array, $value): bool { return self::any_if($array, cv::Fequals($value)); } | ||||
|   static final function any_not_equals(?array $array, $value): bool { return self::any_if($array, cv::Fnot_equals($value)); } | ||||
|   static final function any_same(?array $array, $value): bool { return self::any_if($array, cv::Fsame($value)); } | ||||
|   static final function any_not_same(?array $array, $value): bool { return self::any_if($array, cv::Fnot_same($value)); } | ||||
| 
 | ||||
|   #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 | ||||
|    | ||||
| @ -876,10 +876,10 @@ class cl { | ||||
|   static final function filter_f(?array $array): ?array { return self::filter_if($array, [cv::class, "f"]);} | ||||
|   static final function filter_pt(?array $array): ?array { return self::filter_if($array, [cv::class, "pt"]);} | ||||
|   static final function filter_pf(?array $array): ?array { return self::filter_if($array, [cv::class, "pf"]);} | ||||
|   static final function filter_equals(?array $array, $value): ?array { return self::filter_if($array, cv::equals($value)); } | ||||
|   static final function filter_not_equals(?array $array, $value): ?array { return self::filter_if($array, cv::not_equals($value)); } | ||||
|   static final function filter_same(?array $array, $value): ?array { return self::filter_if($array, cv::same($value)); } | ||||
|   static final function filter_not_same(?array $array, $value): ?array { return self::filter_if($array, cv::not_same($value)); } | ||||
|   static final function filter_equals(?array $array, $value): ?array { return self::filter_if($array, cv::Fequals($value)); } | ||||
|   static final function filter_not_equals(?array $array, $value): ?array { return self::filter_if($array, cv::Fnot_equals($value)); } | ||||
|   static final function filter_same(?array $array, $value): ?array { return self::filter_if($array, cv::Fsame($value)); } | ||||
|   static final function filter_not_same(?array $array, $value): ?array { return self::filter_if($array, cv::Fnot_same($value)); } | ||||
| 
 | ||||
|   #############################################################################
 | ||||
| 
 | ||||
|  | ||||
| @ -49,7 +49,7 @@ class cv { | ||||
|    * contruire une fonction qui retourne vrai si on lui passe en argument une | ||||
|    * valeur égale à $value | ||||
|    */ | ||||
|   static final function equals($value): callable { | ||||
|   static final function Fequals($value): callable { | ||||
|     return function ($arg) use($value) { return $arg == $value; }; | ||||
|   } | ||||
| 
 | ||||
| @ -57,7 +57,7 @@ class cv { | ||||
|    * contruire une fonction qui retourne vrai si on lui passe en argument une | ||||
|    * valeur qui n'est pas égale à $value | ||||
|    */ | ||||
|   static final function not_equals($value): callable { | ||||
|   static final function Fnot_equals($value): callable { | ||||
|     return function ($arg) use($value) { return $arg != $value; }; | ||||
|   } | ||||
| 
 | ||||
| @ -65,7 +65,7 @@ class cv { | ||||
|    * contruire une fonction qui retourne vrai si on lui passe en argument une | ||||
|    * valeur strictement égale à $value | ||||
|    */ | ||||
|   static final function same($value): callable { | ||||
|   static final function Fsame($value): callable { | ||||
|     return function ($arg) use($value) { return $arg === $value; }; | ||||
|   } | ||||
| 
 | ||||
| @ -73,7 +73,7 @@ class cv { | ||||
|    * contruire une fonction qui retourne vrai si on lui passe en argument une | ||||
|    * valeur qui n'est pas strictement égale à $value | ||||
|    */ | ||||
|   static final function not_same($value): callable { | ||||
|   static final function Fnot_same($value): callable { | ||||
|     return function ($arg) use($value) { return $arg !== $value; }; | ||||
|   } | ||||
| 
 | ||||
| @ -231,6 +231,24 @@ class cv { | ||||
| 
 | ||||
|   #############################################################################
 | ||||
| 
 | ||||
|   /** | ||||
|    * tester l'égalité non stricte de deux valeurs, dans le cas où leurs types ne | ||||
|    * sont pas forcément cohérents: par exemple eq("1", 1) === true | ||||
|    * | ||||
|    * cette fonction est utile par exemple quand on veut comparer des données | ||||
|    * provenant d'une base de données: PHP a la facheuse tendance de retourner | ||||
|    * les nombres sous forme de chaines | ||||
|    */ | ||||
|   static final function equals($a, $b): bool { | ||||
|     # cette fonction existe parce que le type des valeurs retournées par la BDD
 | ||||
|     # n'est pas cohérent, "1" au lieu de 1 par exemple
 | ||||
|     if ($a === null) return $b === null; | ||||
|     elseif ($b === null) return $a === null; | ||||
|     elseif (is_scalar($a)) return strval($a) === strval($b); | ||||
|     # ne pas utiliser l'égalité stricte ici: ce sont des objets
 | ||||
|     else return $a == $b; | ||||
|   } | ||||
| 
 | ||||
|   /** retourner -1, 0 ou 1 en fonction de l'ordre relatif entre $a et $b */ | ||||
|   static final function compare($a, $b): int { | ||||
|     if ($a === $b) return 0; | ||||
|  | ||||
| @ -3,6 +3,7 @@ namespace nulib\db; | ||||
| 
 | ||||
| use nulib\A; | ||||
| use nulib\cl; | ||||
| use nulib\cv; | ||||
| use nulib\db\_private\_migration; | ||||
| use nulib\php\func; | ||||
| use nulib\ValueException; | ||||
| @ -479,8 +480,9 @@ abstract class CapacitorStorage { | ||||
|             # ne jamais mettre à jour la clé primaire
 | ||||
|             continue; | ||||
|           } | ||||
|           $pvalue = $praw[$col] ?? null; | ||||
|           if ($value !== $pvalue) $updates[$col] = $value; | ||||
|           if (!cv::equals($value, $praw[$col] ?? null)) { | ||||
|             $updates[$col] = $value; | ||||
|           } | ||||
|         } | ||||
|         if (count($updates) == 1 && array_key_first($updates) == "modified_") { | ||||
|           # si l'unique modification porte sur la date de modification, alors
 | ||||
|  | ||||
| @ -139,6 +139,12 @@ class DateTime extends \DateTime { | ||||
|     return false; | ||||
|   } | ||||
| 
 | ||||
|   /** retourner le nombre de secondes depuis minuit */ | ||||
|   static function _nbsecs_format(\DateTime $datetime): string { | ||||
|     [$h, $m, $s] = explode(",", $datetime->format("H,i,s")); | ||||
|     return $h * 3600 + $m * 60 + $s; | ||||
|   } | ||||
| 
 | ||||
|   static function _YmdHMSZ_format(\DateTime $datetime): string { | ||||
|     $YmdHMS = $datetime->format("Ymd\\THis"); | ||||
|     $Z = $datetime->format("P"); | ||||
| @ -156,6 +162,7 @@ class DateTime extends \DateTime { | ||||
|     "second" => "s", | ||||
|     "wday" => "N", | ||||
|     "wnum" => "W", | ||||
|     "nbsecs" => [self::class, "_nbsecs_format"], | ||||
|   ]; | ||||
|   const STRING_FORMATS = [ | ||||
|     "timezone" => "P", | ||||
| @ -166,14 +173,6 @@ class DateTime extends \DateTime { | ||||
|     "YmdHMSZ" => [self::class, "_YmdHMSZ_format"], | ||||
|   ]; | ||||
| 
 | ||||
|   static function clone(DateTimeInterface $dateTime): self { | ||||
|     if ($dateTime instanceof static) return clone $dateTime; | ||||
|     $clone = new static(); | ||||
|     $clone->setTimestamp($dateTime->getTimestamp()); | ||||
|     $clone->setTimezone($dateTime->getTimezone()); | ||||
|     return $clone; | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
|    * corriger une année à deux chiffres qui est située dans le passé et | ||||
|    * retourner l'année à 4 chiffres. | ||||
| @ -282,7 +281,7 @@ class DateTime extends \DateTime { | ||||
|       if ($Y !== null) { | ||||
|         if ($H === null) $datetime = sprintf("%04d-%02d-%02d", $Y, $m, $d); | ||||
|         else $datetime = sprintf("%04d-%02d-%02d %02d:%02d:%02d", $Y, $m, $d, $H, $M, $S); | ||||
|         if ($Z !== null) $timezone = new DateTimeZone(self::fix_z($Z)); | ||||
|         if ($Z !== null) $timezone ??= new DateTimeZone(self::fix_z($Z)); | ||||
|       } | ||||
|       parent::__construct($datetime, $timezone); | ||||
| 
 | ||||
| @ -295,7 +294,7 @@ class DateTime extends \DateTime { | ||||
|       } else { | ||||
|         $datetime = sprintf("%04d-%02d-%02d %02d:%02d:%02d", $Y, $m, $d, $H ?? 0, $M ?? 0, $S ?? 0); | ||||
|       } | ||||
|       if ($Z !== null) $timezone = new DateTimeZone(self::fix_z($Z)); | ||||
|       if ($Z !== null) $timezone ??= new DateTimeZone(self::fix_z($Z)); | ||||
|       parent::__construct($datetime, $timezone); | ||||
| 
 | ||||
|     } else { | ||||
| @ -308,6 +307,10 @@ class DateTime extends \DateTime { | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   function clone(): self { | ||||
|     return clone $this; | ||||
|   } | ||||
| 
 | ||||
|   function diff($target, $absolute=false): DateInterval { | ||||
|     return new DateInterval(parent::diff($target, $absolute)); | ||||
|   } | ||||
| @ -374,7 +377,7 @@ class DateTime extends \DateTime { | ||||
|   function __get($name) { | ||||
|     if (array_key_exists($name, self::INT_FORMATS)) { | ||||
|       $format = self::INT_FORMATS[$name]; | ||||
|       if (is_callable($format)) return $format($this); | ||||
|       if (is_callable($format)) return intval($format($this)); | ||||
|       else return intval($this->format($format)); | ||||
|     } elseif (array_key_exists($name, self::STRING_FORMATS)) { | ||||
|       $format = self::STRING_FORMATS[$name]; | ||||
|  | ||||
| @ -40,8 +40,8 @@ class Delay { | ||||
|     "s" => [1, 0], | ||||
|   ]; | ||||
| 
 | ||||
|   static function compute_dest(int $x, string $u, ?int $y, DateTime $from): array { | ||||
|     $dest = DateTime::clone($from); | ||||
|   static function compute_dest(int $x, string $u, ?int $y, ?DateTimeInterface $from): array { | ||||
|     $dest = DateTime::with($from)->clone(); | ||||
|     $yu = null; | ||||
|     switch ($u) { | ||||
|     case "w": | ||||
| @ -92,7 +92,7 @@ class Delay { | ||||
|   function __construct($delay, ?DateTimeInterface $from=null) { | ||||
|     if ($from === null) $from = new DateTime(); | ||||
|     if ($delay === "INF") { | ||||
|       $dest = DateTime::clone($from); | ||||
|       $dest = DateTime::with($from)->clone(); | ||||
|       $dest->add(new DateInterval("P9999Y")); | ||||
|       $repr = "INF"; | ||||
|     } elseif (is_int($delay)) { | ||||
|  | ||||
| @ -29,7 +29,7 @@ class DateTest extends TestCase { | ||||
| 
 | ||||
|   function testClone() { | ||||
|     $date = self::dt("now"); | ||||
|     $clone = Date::clone($date); | ||||
|     $clone = $date->clone(); | ||||
|     self::assertInstanceOf(DateTime::class, $clone); | ||||
|   } | ||||
| 
 | ||||
|  | ||||
| @ -32,13 +32,17 @@ class DateTimeTest extends TestCase { | ||||
| 
 | ||||
|   function testDateTimeZ() { | ||||
|     $date = new DateTime("20240405T091523Z"); | ||||
|     self::assertSame("20240405T131523", $date->YmdHMS); | ||||
|     self::assertSame("20240405T131523+04:00", $date->YmdHMSZ); | ||||
|     # comme on spécifie la timezone, la valeur Z est ignorée
 | ||||
|     $date = new DateTime("20240405T091523Z", new DateTimeZone("Indian/Reunion")); | ||||
|     self::assertSame("20240405T091523", $date->YmdHMS); | ||||
|     self::assertSame("20240405T091523Z", $date->YmdHMSZ); | ||||
|     self::assertSame("20240405T091523+04:00", $date->YmdHMSZ); | ||||
|   } | ||||
| 
 | ||||
|   function testClone() { | ||||
|     $date = self::dt("now"); | ||||
|     $clone = DateTime::clone($date); | ||||
|     $clone = $date->clone(); | ||||
|     self::assertInstanceOf(DateTime::class, $clone); | ||||
|   } | ||||
| 
 | ||||
| @ -51,7 +55,7 @@ class DateTimeTest extends TestCase { | ||||
|     self::assertSame("05/04/2024 00:00:00", strval(new DateTime("20240405"))); | ||||
|     self::assertSame("05/04/2024 00:00:00", strval(new DateTime("240405"))); | ||||
|     self::assertSame("05/04/2024 09:15:23", strval(new DateTime("20240405T091523"))); | ||||
|     self::assertSame("05/04/2024 09:15:23", strval(new DateTime("20240405T091523Z"))); | ||||
|     self::assertSame("05/04/2024 13:15:23", strval(new DateTime("20240405T091523Z"))); | ||||
|     self::assertSame("05/04/2024 09:15:23", strval(new DateTime("5/4/2024 9:15:23"))); | ||||
|     self::assertSame("05/04/2024 09:15:23", strval(new DateTime("5/4/2024 9.15.23"))); | ||||
|     self::assertSame("05/04/2024 09:15:00", strval(new DateTime("5/4/2024 9:15"))); | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user