ILIAS  trunk Revision v11.0_alpha-3011-gc6b235a2e85
IntegerTransformation.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
22
27
29{
32 private const REG_INT = '/^\s*(0|(-?[1-9]\d*))\s*$/';
33
37 public function transform($from): int
38 {
39 if (is_int($from)) {
40 return $from;
41 }
42
43 if ($from !== INF && $from !== -INF && is_float($from) && !is_nan($from)) {
44 $from = round($from);
45 return (int) $from;
46 }
47
48 if (is_bool($from)) {
49 return (int) $from;
50 }
51
52 if (is_string($from) && preg_match(self::REG_INT, $from)) {
53 $int = (int) $from;
54 // This is supposed to guard against PHP_MIN_INT and PHP_MAX_INT.
55 // We only return the value if it looks the same when transforming it
56 // back to string. This won't be the case for too big or too small
57 // values.
58 if (trim($from) === (string) $int) {
59 return $int;
60 }
61 }
62
64 sprintf('The value "%s" can not be transformed into an integer', var_export($from, true)),
65 'not_integer',
66 $from
67 );
68 }
69}
A transformation is a function from one datatype to another.