Search moodle.org's
Developer Documentation

See Release Notes
Long Term Support Release

  • Bug fixes for general core bugs in 4.1.x will end 13 November 2023 (12 months).
  • Bug fixes for security issues in 4.1.x will end 10 November 2025 (36 months).
  • PHP version: minimum PHP 7.4.0 Note: minimum PHP version has increased since Moodle 4.0. PHP 8.0.x is supported too.

Differences Between: [Versions 310 and 401] [Versions 311 and 401] [Versions 39 and 401]

   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" cannot be saved.', basename($filepath)));
  16          }
  17  
  18          $serialized = serialize($estimator);
  19          if (!isset($serialized[0])) {
  20              throw new SerializeException(sprintf('Class "%s" cannot 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" cannot 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" cannot be opened.', basename($filepath)));
  33          }
  34  
  35          $object = unserialize((string) file_get_contents($filepath));
  36          if ($object === false || !$object instanceof Estimator) {
  37              throw new SerializeException(sprintf('"%s" cannot be unserialized.', basename($filepath)));
  38          }
  39  
  40          return $object;
  41      }
  42  }