Ich würde die Größe einer Funktion nicht an der Anzahl der Zeilen fest machen denn das hängt mir irgendwie zu arg vom Programmierstiel ab
Ja klar ist das Stil... Sauberer Stil und nicht-sauberer Stil.
An der Uni lernst Du wirklich Hard-Core-OOP... So wie man es eigentlich richtig macht. Und da schachtelt man alles ab. Eine Klasse hat dann manchmal auch eben nur zwanzig dreißig Zeilen. Aber das führt zu extrem übersichtlichem und leicht-verständlichem Code. Weil Du sofort verstehst, was die Klasse macht.
Um das mal zu verdeutlichen. Hab mir für phpBB mal ein Mini-Framework für Formulare gebastelt. Das sieht dann so aus.
Code: Alles auswählen
$this->message_TXT = new text_box($this);
$this->message_TXT->rows_INT = 5;
$this->message_TXT->text_STR = $user->lang['MESSAGE'];
$this->message_TXT->style_OBJ->width_INT = 300;
$this->message_TXT->is_required_BLN = true;
$this->newsletter_CHK = new checkbox($this);
$this->newsletter_CHK->text_STR = $user->lang['NEWSLETTER'];
$this->newsletter_CHK->create_item($user->lang['NEWSLETTER_SUBSCRIBE'], 1);
$this->captcha_OBJ = new captcha($this);
$this->captcha_OBJ->text_STR = $user->lang['CONFIRM_CODE'];
$this->captcha_OBJ->description_STR = $user->lang['RECAPTCHA_EXPLAIN'];.
.
.
Es gibt eine Klasse Formular, eine Klasse Formular-Feld, eine Klasse Checkbox (die erbt von Formularfeld), dann wieder eine Klasse für ein Checkbox-Item usw. usw.
Ist zwar noch nicht perfekt. Aber dafür, dass ich das mal an einem Nachmittag runtergeschrieben hab, klappt das gut. Programmieren geht dann auch wesentlich schneller, weil man immer nur kleine Einheiten hat.
Wenn ich mir da gerade anschaue, was ich da heute an der viewtopic rumgeschraubt habe um ein paar URLs umzuschreiben

Wo wird die $base_url generiert... warum wird sie bei der einen URL benutzt und bei der anderen nicht... In welchen hooks kann darauf zugreifen.
Eigentlich könnte die viewtopic ein Zehnzeiler sein:
Code: Alles auswählen
.
.
.
if ($post_id_INT)
{
$topic_OBJ = Topic::load_by_post_id($post_id_INT, $start_INT, $sort_STR);
}
elseif($topic_id_INT)
{
$topic_OBJ = Topic::load_by_topic_id($post_id_INT, $start_INT, $sort_STR);
}
$topic_OBJ->render();
Und alles andere läuft dann in der Topic-Klasse. Diese besteht aber auch nur aus wenigen Zeilen, weil sie im Prinzip nur ein Array mit Posting-Objekten enthält. Die Postingklasse hat als Properties eine eine Message-Klasse, eine User-Klasse, der User hat eine Avatar-Klasse, Signatur-Klasse usw.
Jede Klasse hat eine render() Methode, die den HTML-Code ins Template schreibt. Die Topic->render ruft dann jeweils die render Methoden von posting auf usw.
Am Ende hat man dann zwar ein paar Dateien mehr als jetzt, aber man hat nicht mehr diese 3000-Zeilen-Trümmer, wo man erstmal drei Wochen studieren muss, um zu kapieren, was die überhaupt alles machen. Man blickt sofort was Sache ist, denn so ein Avatar-Objekt, kennt seine URL, weiß wie groß es ist und es kann dies an die Außenwelt kommunizieren. Sie hat nur eine handvoll Methoden (upload, delete, render) und sonst nichts...