@sowIq: co innego gdy korzystasz z Fw, a co innego gdy sam się zabrałeś za pisanie czegoś z
celowym jego pominięciem, by narzut czasowy zlikwidować w ramach optymalizacji wąskich gardeł aplikacji.
Poza tym wiele osób nie zwraca uwagi, że funkcje php mogą zwrócić w normalnym trybie jako prawidłowy wynik 0 czy false, zaś jako nieprawidłowy null, a inne z kolei zwracają jako prawidłowe 0 i false, ale już nie null. Brak po prostu jednoznacznego określenia co jest prawidłowe, a co nie w tym języku. Wtedy:
if ($zmienna == 0)
i mamy WTF bo false == 0, co nie zawsze jest tym o co chodziło

Pisząc od początku w jakimś Fw o wielu takich rzeczach się nie wie i nie myśli. Potem nadchodzi zmiana Fw i jest kaplica.
Headery? Nadal są gdy ktoś zapisze plik w UTF-8, ale nie zwróci uwagi jakim (stąd uwaga o BOM) albo przed <?php zdarzy mu się enter. Takich rzeczy Fw
nie wyłapie.
Zasięg zmiennych? Nie każdy kod ma 5 linijek... Czasami metody z racji takich, a nie innych sytuacji mają ogromną złożoność i zdarza się, że w 5-6 zagnieżdżeniu ( niekoniecznie pętli, ale i struktury warunkowej) można się już na tym naciąć. Przykład Ci krótki dam, gdyż jakiś czas temu sobie skrobnąłem. Metoda ma znaczne complexity, ponieważ dane do niej przychodzące i obrabiane mogą być tablicą, ale i stringiem. Z kolei inny parametr może być raz stringiem, ale innym razem nullem

$bestHit = false;
try{
foreach($this->structure AS $main) {
if(null !== $first && $first !== $main['name']) {
continue;
}
foreach($main['childrens'] AS $nested) {
$this->property = array('main' => $main['name'], 'child' => $nested['name']); foreach($nested['attr'] AS $attr_name => $attr_data) {
if( array_key_exists('params', $name) && $name['params'] == $attr_data['params'] ) { return $this;
} else {
$bestHit = true;
}
}
}
} else {
$this->property = array('main' => $main['name'], 'child' => $nested['name']); return $this;
} elseif ($name == $nested['name']) {
$this->property = array('main' => $main['name'], 'child' => $nested['name']); return $this;
}
}
}
}
if($bestHit) {
return $this;
}
} catch (Exception $e) {
throw tu_wyjatek_okreslony_przeze mnie(); // wiem co może mi rzucić, ale dla pewności łapię zakres Exception, a nie od niego pochodny
}
$this->property = array('main' => '', 'child' => ''); return $this;
I powiedz mi, ile czasu zajęło by Ci zrozumienie co w tym się dzieje, w jakim celu i kiedy oraz co jest zwracane

Nie jest to kwestia sporzenia przez moment, a to tylko 30 linijek, będących
całym ciałem jednej metody. Complexity tego kodu jest naprawdę duże, ale wynika ze struktury danych oraz danych wejściowych dla tej metody. Z tego nie wytniesz nawet linijki do metody prywatnej czy nie zrobisz klasy pomocniczej, która by to uprościła. Weź się walnij z returnem, miejscem inicjalizacji $bestHit lub przypisaniem danych do niej i masz problem z zasięgiem. A popatrz jak wiele miejsc ma ta metoda, by się pomylić, choć to tylko 2 zagnieżdżone foreach, tyle że ifów jest tu niestety wiele. I tak... Metoda ma napisany test, który ją całkowicie pokrywa, więc w razie czego wyłapię problem.