Proyectos de Subversion Moodle

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 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
}