Conditions | 21 |
Paths | 41 |
Total Lines | 65 |
Lines | 0 |
Ratio | 0 % |
Changes | 0 |
Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.
For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.
Commonly applied refactorings include:
If many parameters/temporary variables are present:
1 | <?php |
||
146 | public function process($calls) |
||
147 | { |
||
148 | // open first paragraph |
||
149 | $this->openParagraph(0); |
||
150 | foreach ($calls as $key => $call) { |
||
151 | $cname = $call[0]; |
||
152 | if ($cname == 'plugin') { |
||
153 | $cname='plugin_'.$call[1][0]; |
||
154 | $plugin = true; |
||
155 | $plugin_open = (($call[1][2] == DOKU_LEXER_ENTER) || ($call[1][2] == DOKU_LEXER_SPECIAL)); |
||
156 | $plugin_close = (($call[1][2] == DOKU_LEXER_EXIT) || ($call[1][2] == DOKU_LEXER_SPECIAL)); |
||
157 | } else { |
||
158 | $plugin = false; |
||
159 | } |
||
160 | /* stack */ |
||
161 | if (in_array($cname, $this->stackClose) && (!$plugin || $plugin_close)) { |
||
|
|||
162 | $this->closeParagraph($call[2]); |
||
163 | $this->storeCall($call); |
||
164 | $this->openParagraph($call[2]); |
||
165 | continue; |
||
166 | } |
||
167 | if (in_array($cname, $this->stackOpen) && (!$plugin || $plugin_open)) { |
||
168 | $this->closeParagraph($call[2]); |
||
169 | $this->storeCall($call); |
||
170 | $this->openParagraph($call[2]); |
||
171 | continue; |
||
172 | } |
||
173 | /* block */ |
||
174 | // If it's a substition it opens and closes at the same call. |
||
175 | // To make sure next paragraph is correctly started, let close go first. |
||
176 | if (in_array($cname, $this->blockClose) && (!$plugin || $plugin_close)) { |
||
177 | $this->closeParagraph($call[2]); |
||
178 | $this->storeCall($call); |
||
179 | $this->openParagraph($call[2]); |
||
180 | continue; |
||
181 | } |
||
182 | if (in_array($cname, $this->blockOpen) && (!$plugin || $plugin_open)) { |
||
183 | $this->closeParagraph($call[2]); |
||
184 | $this->storeCall($call); |
||
185 | continue; |
||
186 | } |
||
187 | /* eol */ |
||
188 | if ($cname == 'eol') { |
||
189 | // Check this isn't an eol instruction to skip... |
||
190 | if (!$this->skipEol) { |
||
191 | // Next is EOL => double eol => mark as paragraph |
||
192 | if (isset($calls[$key+1]) && $calls[$key+1][0] == 'eol') { |
||
193 | $this->closeParagraph($call[2]); |
||
194 | $this->openParagraph($call[2]); |
||
195 | } else { |
||
196 | //if this is just a single eol make a space from it |
||
197 | $this->addCall(array('cdata',array("\n"), $call[2])); |
||
198 | } |
||
199 | } |
||
200 | continue; |
||
201 | } |
||
202 | /* normal */ |
||
203 | $this->addCall($call); |
||
204 | $this->skipEol = false; |
||
205 | } |
||
206 | // close last paragraph |
||
207 | $call = end($this->calls); |
||
208 | $this->closeParagraph($call[2]); |
||
209 | return $this->calls; |
||
210 | } |
||
211 | } |
||
212 |
If you define a variable conditionally, it can happen that it is not defined for all execution paths.
Let’s take a look at an example:
In the above example, the variable $x is defined if you pass “foo” or “bar” as argument for $a. However, since the switch statement has no default case statement, if you pass any other value, the variable $x would be undefined.
Available Fixes
Check for existence of the variable explicitly:
Define a default value for the variable:
Add a value for the missing path: