Search moodle.org's
Developer Documentation

See Release Notes

  • Bug fixes for general core bugs in 3.11.x will end 14 Nov 2022 (12 months plus 6 months extension).
  • Bug fixes for security issues in 3.11.x will end 13 Nov 2023 (18 months plus 12 months extension).
  • PHP version: minimum PHP 7.3.0 Note: minimum PHP version has increased since Moodle 3.10. PHP 7.4.x is supported too.

Differences Between: [Versions 311 and 400] [Versions 311 and 401] [Versions 311 and 402] [Versions 311 and 403]

   1  <?php
   2  
   3  declare(strict_types=1);
   4  
   5  namespace Phpml;
   6  
   7  use Phpml\Exception\FileException;
   8  use Phpml\Exception\SerializeException;
   9  
  10  class ModelManager
  11  {
  12      public function saveToFile(Estimator $estimator, string $filepath): void
  13      {
  14          if (!is_writable(dirname($filepath))) {
  15              throw new FileException(sprintf('File "%s" can\'t be saved.', basename($filepath)));
  16          }
  17  
  18          $serialized = serialize($estimator);
  19          if (!isset($serialized[0])) {
  20              throw new SerializeException(sprintf('Class "%s" can not be serialized.', gettype($estimator)));
  21          }
  22  
  23          $result = file_put_contents($filepath, $serialized, LOCK_EX);
  24          if ($result === false) {
  25              throw new FileException(sprintf('File "%s" can\'t be saved.', basename($filepath)));
  26          }
  27      }
  28  
  29      public function restoreFromFile(string $filepath): Estimator
  30      {
  31          if (!file_exists($filepath) || !is_readable($filepath)) {
  32              throw new FileException(sprintf('File "%s" can\'t be open.', basename($filepath)));
  33          }
  34  
  35          $object = unserialize((string) file_get_contents($filepath), [Estimator::class]);
  36          if ($object === false) {
  37              throw new SerializeException(sprintf('"%s" can not be unserialized.', basename($filepath)));
  38          }
  39  
  40          return $object;
  41      }
  42  }