Conditions | 11 |
Paths | 43 |
Total Lines | 126 |
Code Lines | 59 |
Lines | 19 |
Ratio | 15.08 % |
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 |
||
131 | public function create() |
||
132 | { |
||
133 | $root_id = $this->getRootID(); |
||
134 | $items = $this->getItems(); |
||
135 | $nesting = $this->getNesting(); |
||
136 | |||
137 | if (empty($items)) { |
||
138 | return false; |
||
139 | } |
||
140 | |||
141 | View Code Duplication | foreach ($items as $item) { |
|
142 | if (null !== $item->getParentId()) { |
||
143 | $children[$item->getParentId()][] = $item; |
||
144 | } |
||
145 | } |
||
146 | |||
147 | // loop will be false if the root has no children (i.e., an empty menu!) |
||
148 | $loop = !empty($children[$root_id]); |
||
149 | |||
150 | // initializing $parent as the root |
||
151 | $parent = $root_id; |
||
152 | $parent_stack = array(); |
||
153 | |||
154 | $html = []; |
||
155 | |||
156 | // HTML wrapper for the menu (open) |
||
157 | $html[] = '<ul>'; |
||
158 | |||
159 | $html[] = !empty($before['first_root_li']) ? str_repeat("\t", $nesting + 1).$before['first_root_li'] : ''; |
||
160 | |||
161 | // loop |
||
162 | while ($loop && (($item = each($children[$parent])) || ($parent > $root_id))) { |
||
163 | View Code Duplication | if (is_object($item['value'])) { |
|
164 | /** |
||
165 | * @var MenuItem $obj |
||
166 | */ |
||
167 | $obj = $item['value']; |
||
168 | $item = [ |
||
169 | 'id' => $obj->getId(), |
||
170 | 'parent_id' => $obj->getParentId(), |
||
171 | 'title' => $obj->getTitle(), |
||
172 | 'slug' => $obj->getSlug(), |
||
173 | 'caption' => $obj->getCaption(), |
||
174 | 'position' => $obj->getPosition(), |
||
175 | ]; |
||
176 | } |
||
177 | |||
178 | // HTML for menu item containing children (close) |
||
179 | if ($item === false) { |
||
180 | $parent = array_pop($parent_stack); |
||
181 | $html[] = str_repeat("\t", (count($parent_stack) + 1) * 2 + $nesting).'</ul>'; |
||
182 | $html[] = str_repeat("\t", (count($parent_stack) + 1) * 2 - 1 + $nesting).'</li>'; |
||
183 | } |
||
184 | |||
185 | // HTML for menu item containing children (open) |
||
186 | elseif (!empty($children[$item['id']])) { |
||
187 | $tab = str_repeat("\t", (count($parent_stack) + 1) * 2 - 1 + $nesting); |
||
188 | |||
189 | /* |
||
190 | * <li> with <ul> |
||
191 | */ |
||
192 | $html[] = sprintf( |
||
193 | '%1$s'.'<li>%2$s - <a'.'%3$s'.' href="'.'%4$s'.'">%5$s</a> – pozycja: %6$s'. |
||
194 | ' <a href="/admin/appearance/menu/edit/%2$s" class="btn btn-primary btn-xs">Edytuj</a>'. |
||
195 | ' <a href="/admin/appearance/menu/del/%2$s" class="btn btn-danger btn-xs">Usuń</a>', |
||
196 | # %1$s tabulation |
||
197 | $tab, |
||
198 | |||
199 | $item['id'], |
||
200 | |||
201 | # %2$s a title="" |
||
202 | $this->isAttribute('title', $item['caption']), |
||
203 | |||
204 | # %3$s a href="" |
||
205 | $item['slug'], |
||
206 | |||
207 | # %4$s text inside item |
||
208 | $item['title'], |
||
209 | |||
210 | $item['position'] |
||
211 | ); |
||
212 | |||
213 | /* |
||
214 | * sub <ul> in <li> |
||
215 | */ |
||
216 | $html[] = sprintf( |
||
217 | '%1$s'.'<ul>', |
||
218 | # %1$s tabulation |
||
219 | $tab."\t" |
||
220 | ); |
||
221 | |||
222 | $parent_stack[] = $item['parent_id']; |
||
223 | $parent = $item['id']; |
||
224 | } |
||
225 | |||
226 | // HTML for menu item with no children (aka "leaf") |
||
227 | else { |
||
228 | $html[] = sprintf( |
||
229 | '%1$s'.'<li>%2$s - <a'.'%3$s'.' href="'.'%4$s'.'">%5$s</a> – pozycja: %6$s'. |
||
230 | ' <a href="/admin/appearance/menu/edit/%2$s" class="btn btn-primary btn-xs">Edytuj</a>'. |
||
231 | ' <a href="/admin/appearance/menu/del/%2$s" class="btn btn-danger btn-xs">Edytuj</a>', |
||
232 | |||
233 | # %1$s tabulation |
||
234 | str_repeat("\t", (count($parent_stack) + 1) * 2 - 1 + $nesting), |
||
235 | |||
236 | $item['id'], |
||
237 | |||
238 | # %2$s a title="" |
||
239 | $this->isAttribute('title', $item['caption']), |
||
240 | |||
241 | # %3$s a href="" |
||
242 | $item['slug'], |
||
243 | |||
244 | # %4$s text inside item |
||
245 | $item['title'], |
||
246 | |||
247 | $item['position'] |
||
248 | ); |
||
249 | } |
||
250 | } |
||
251 | |||
252 | // HTML wrapper for the menu (close) |
||
253 | $html[] = str_repeat("\t", $nesting).'</ul>'; |
||
254 | |||
255 | return implode("\n", array_filter($html))."\n"; |
||
256 | } |
||
257 | } |
||
258 |
Let’s assume that you have a directory layout like this:
and let’s assume the following content of
Bar.php
:If both files
OtherDir/Foo.php
andSomeDir/Foo.php
are loaded in the same runtime, you will see a PHP error such as the following:PHP Fatal error: Cannot use SomeDir\Foo as Foo because the name is already in use in OtherDir/Foo.php
However, as
OtherDir/Foo.php
does not necessarily have to be loaded and the error is only triggered if it is loaded beforeOtherDir/Bar.php
, this problem might go unnoticed for a while. In order to prevent this error from surfacing, you must import the namespace with a different alias: