ILIAS  release_8 Revision v8.19
All Data Structures Namespaces Files Functions Variables Modules Pages
IntegerTransformation.php
Go to the documentation of this file.
1 <?php
2 
3 declare(strict_types=1);
4 
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.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...