Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 23
0.00% covered (danger)
0.00%
0 / 3
CRAP
0.00% covered (danger)
0.00%
0 / 1
common_cache_SingletonCache
0.00% covered (danger)
0.00%
0 / 23
0.00% covered (danger)
0.00%
0 / 3
42
0.00% covered (danger)
0.00%
0 / 1
 singleton
0.00% covered (danger)
0.00%
0 / 6
0.00% covered (danger)
0.00%
0 / 1
6
 getCached
0.00% covered (danger)
0.00%
0 / 16
0.00% covered (danger)
0.00%
0 / 1
12
 __construct
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
1<?php
2
3/**
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public License
6 * as published by the Free Software Foundation; under version 2
7 * of the License (non-upgradable).
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
17 *
18 * Copyright (c) 2014 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);
19 *
20 */
21
22/**
23 * Short description of class common_cache_SingletonCache
24 *
25 * @abstract
26 * @access public
27 * @author Joel Bout, <joel@taotesting.com>
28 * @package generis
29
30 */
31abstract class common_cache_SingletonCache
32{
33    // --- ASSOCIATIONS ---
34
35
36    // --- ATTRIBUTES ---
37
38    /**
39     * Short description of attribute instances
40     *
41     * @access private
42     * @var array
43     */
44    private static $instances = [];
45
46    // --- OPERATIONS ---
47
48    /**
49     * Short description of method singleton
50     *
51     * @access public
52     * @author Joel Bout, <joel@taotesting.com>
53     * @return common_cache_Cache
54     */
55    public static function singleton()
56    {
57        $returnValue = null;
58
59
60        $cacheName = get_called_class();
61        if (!isset(self::$instances[$cacheName])) {
62            self::$instances[$cacheName] = new $cacheName();
63        }
64
65        $returnValue = self::$instances[$cacheName];
66
67
68        return $returnValue;
69    }
70
71    /**
72     * Short description of method getCached
73     *
74     * @access public
75     * @author Joel Bout, <joel@taotesting.com>
76     * @param  function
77     */
78    public static function getCached($function)
79    {
80        $returnValue = null;
81
82
83        $args = func_get_args();
84        array_shift($args);
85        if (!is_string($function)) {
86            $r = new ReflectionFunction($function);
87            $serial = md5(
88                $r->getFileName() .
89                $r->getStartLine() .
90                serialize($args)
91            );
92        } else {
93            $serial = md5($function . serialize($args));
94        }
95        if (static::singleton()->has($serial)) {
96            $returnValue = static::singleton()->has($serial);
97        } else {
98            $returnValue = call_user_func_array($function, $args);
99            static::singleton()->put($serial, $returnValue);
100        }
101
102
103        return $returnValue;
104    }
105
106    /**
107     * Short description of method __construct
108     *
109     * @access private
110     * @author Joel Bout, <joel@taotesting.com>
111     * @return mixed
112     */
113    private function __construct()
114    {
115    }
116}