Singleton::__clone()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 1
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 1
ccs 0
cts 0
cp 0
rs 10
cc 1
eloc 1
nc 1
nop 0
crap 2
1
<?php
2
namespace CloudFramework\Patterns;
3
4
5
/**
6
 * Class Singleton
7
 * @package CloudFramework\Patterns
8
 */
9
class Singleton
10
{
11
12
    private static $instance = array();
13
14
    /**
15
     * Singleton instance generator
16
     * @return $this
17
     */
18 2
    public static function getInstance()
19
    {
20 2
        $class = get_called_class();
21 2
        if (!array_key_exists($class, self::$instance) || null === self::$instance[$class]) {
22 1
            $reflectorClass = new \ReflectionClass($class);
23
            try {
24 1
                self::$instance[$class] = $reflectorClass->newInstanceArgs(func_get_args());
25 1
            } catch(\Exception $e) {
26
                syslog(LOG_ERR, $e->getMessage());
27
                throw $e;
28
            }
29 1
        }
30 2
        return self::$instance[$class];
31
    }
32
33
    /**
34
     * Instance generator alias
35
     * @return $this
36
     */
37
    public static function create()
38
    {
39
        return self::getInstance(func_get_args());
40
    }
41
42
    /**
43
     * Magic setter
44
     * @param string $variable
45
     * @param mixed $value
46
     */
47 1
    public function __set($variable, $value)
48
    {
49 1
        if (property_exists($this, $variable)) {
50
            $this->$variable = $value;
51
        }
52 1
    }
53
54
    /**
55
     * Magic getter
56
     * @param string $variable
57
     * @return mixed
58
     */
59
    public function __get($variable)
60
    {
61
        if (property_exists($this, $variable)) {
62
            return $this->$variable;
63
        } else {
64
            return null;
65
        }
66
    }
67
68
    /**
69
     * Prevent the instance from being cloned
70
     * @return void
71
     */
72
    private function __clone() {}
73
74
    public function __toString()
75
    {
76
        $size = round(strlen(print_r($this, true)) / 1024, 4);
77
        return get_class($this) . " " . $size . " Kbytes";
78
    }
79
}
80