Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
79.17% covered (success)
79.17%
19 / 24
55.56% covered (warning)
55.56%
5 / 9
CRAP
0.00% covered (danger)
0.00%
0 / 1
Profiler
79.17% covered (success)
79.17%
19 / 24
55.56% covered (warning)
55.56%
5 / 9
18.31
0.00% covered (danger)
0.00%
0 / 1
 __construct
66.67% covered (warning)
66.67%
2 / 3
0.00% covered (danger)
0.00%
0 / 1
2.15
 setDebugger
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 getDebugger
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 debugger
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 hasDebugger
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 addStep
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
2
 getSteps
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getCurrentStep
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 __get
100.00% covered (success)
100.00%
9 / 9
100.00% covered (success)
100.00%
1 / 1
6
1<?php
2/**
3 * Pop PHP Framework (http://www.popphp.org/)
4 *
5 * @link       https://github.com/popphp/popphp-framework
6 * @author     Nick Sagona, III <dev@nolainteractive.com>
7 * @copyright  Copyright (c) 2009-2024 NOLA Interactive, LLC. (http://www.nolainteractive.com)
8 * @license    http://www.popphp.org/license     New BSD License
9 */
10
11/**
12 * @namespace
13 */
14namespace Pop\Db\Adapter\Profiler;
15
16use Pop\Debug\Debugger;
17
18/**
19 * MySQL database adapter profiler class
20 *
21 * @category   Pop
22 * @package    Pop\Db
23 * @author     Nick Sagona, III <dev@nolainteractive.com>
24 * @copyright  Copyright (c) 2009-2024 NOLA Interactive, LLC. (http://www.nolainteractive.com)
25 * @license    http://www.popphp.org/license     New BSD License
26 * @version    6.5.0
27 */
28class Profiler extends AbstractProfiler
29{
30
31    /**
32     * Profiler current index
33     * @var int
34     */
35    protected int $current = 0;
36
37    /**
38     * Profiler steps
39     * @var array
40     */
41    protected array $steps = [];
42
43    /**
44     * Debugger
45     * @var ?Debugger
46     */
47    protected ?Debugger $debugger = null;
48
49    /**
50     * Constructor
51     *
52     * Instantiate the profiler object
53     * @param ?Debugger $debugger
54     */
55    public function __construct(?Debugger $debugger = null)
56    {
57        parent::__construct();
58        if ($debugger !== null) {
59            $this->setDebugger($debugger);
60        }
61    }
62    /**
63
64     * Set debugger
65     *
66     * @param  Debugger $debugger
67     * @return Profiler
68     */
69    public function setDebugger(Debugger $debugger): Profiler
70    {
71        $this->debugger = $debugger;
72        return $this;
73    }
74
75    /**
76     * Get debugger
77     *
78     * @return ?Debugger
79     */
80    public function getDebugger(): ?Debugger
81    {
82        return $this->debugger;
83    }
84
85    /**
86     * Get debugger (alias)
87     *
88     * @return ?Debugger
89     */
90    public function debugger(): ?Debugger
91    {
92        return $this->debugger;
93    }
94
95    /**
96     * Has debugger
97     *
98     * @return bool
99     */
100    public function hasDebugger(): bool
101    {
102        return ($this->debugger !== null);
103    }
104
105    /**
106     * Add step
107     *
108     * @param  ?Step $step
109     * @return Profiler
110     */
111    public function addStep(?Step $step = null): Profiler
112    {
113        if ($step === null) {
114            $step = new Step();
115        }
116        $this->steps[] = $step;
117        $this->current = count($this->steps) - 1;
118
119        return $this;
120    }
121
122    /**
123     * Get steps
124     *
125     * @return array
126     */
127    public function getSteps(): array
128    {
129        return $this->steps;
130    }
131
132    /**
133     * Get current step
134     *
135     * @return ?Step
136     */
137    public function getCurrentStep(): ?Step
138    {
139        return $this->steps[$this->current] ?? null;
140    }
141
142    /**
143     * Magic method to support shorthand calls to certain values in the profiler
144     *
145     * @param  string $name
146     * @return mixed
147     */
148    public function __get(string $name)
149    {
150        switch ($name) {
151            case 'start':
152                return $this->start;
153                break;
154            case 'finish':
155                return $this->finish;
156                break;
157            case 'current':
158                return $this->getCurrentStep();
159                break;
160            case 'elapsed':
161                return $this->getElapsed();
162                break;
163            default:
164                return null;
165        }
166    }
167
168}