Bei Sprachen kann man einfach nicht von "was ist besser" reden.
Würdest du den Code kompillieren und deassemblieren, würde von der Länge her das prozedurale gewinnen.
Dafür haben Klassen grosse Vorteile bei der Bedienbarkeit, weil ein
PHP:
$postid = new post($author, $title, $message, time(), $threadid);
eben einfacher ist als ein
PHP:
$res = mysql_query("INSERT INTO beitraege VALUES (NULL, '".addslashes($author)."', '".addslashes($title)."', '".addslashes($message)."', '".time()."', '".intval($threadid)."')", $mysql_connection);
$postid = mysql_insert_id($mysql_connection);
add_to_searchindex($postid);
$res = mysql_query("UPDATE foren SET lastpostid = '".$postid."' WHERE boardid = ".intval($boardid)." LIMIT 1", $mysql_connection);
//even more?
Zurück zur Frage. Variante 2 gibt es gar nicht. Wenn du nämlich das machst:
PHP:
<?php
class dummy {
echo 'haha verarscht!';
}
?>
bekommst du sowas:
PHP:
Parse error: syntax error, unexpected T_ECHO, expecting T_FUNCTION in [path]/filename.php on line 5
Und Variante 1 hat eine Reihe von Vorteilen. Damit kann man nämlich für Programmierer die Aufrufe von Funktionen gleich halten (z.b. das allseits bekannte und gleichermassen beliebte $db->query($query); ), denn ob es sich um eine MySQL, MySQLi, Oracle oder MSSQL-Datenbank handelt, wird inkl dem Rattenschwanz (Verbindung aufbauen und halten, dafür sorgen, dass insert-IDs zur Verfügung stehen) erstens woanders entschieden und zweitens von der Klasse übernommen. Das ist in manchen Situationen ein grosser Vorteil, denn auch durch die Vererbung kann man Methoden überschreiben. Durch die Sichtbarkeiten muss man nichts globalisieren und und und.
Also an der Stelle auf Gedeih und Verderb nur über die nakte Geschwindigkeit zu reden, ist der Grundstein für ein Scheitern der Software. Man muss da immer miese Kompromisse eingehen, sei es bei der Erweiterbarkeit (im Vergleich zum Ausgangsquellcode) oder bei der Übersichtlichkeit. Stichwort Erweiterbarkeit.
Um dir mal ein Beispiel zu geben.
Es gibt irgendwo einen Parser.
Der sieht so aus:
PHP:
class parser {
function parse($text) {
return str_replace('[b]', '[b]', str_replace('[/b]', '[/b]', $text));
}
}
Folgerichtig ist der Aufruf dann irgendwo der hier:
PHP:
echo $parser->parse('Heute ist ein [b]regnerischer[/b] [u]Tag[/u]');
Nun stellt ein Programmierer aber fest, dass dieser Parser ziemlich scheisse ist, weil er ja nur fette Schrift kann. Und schreibt sich eine eigene Klasse.
PHP:
class bessererParser extends parser {
function parse($text) {
$text = $preg_replace('/\[b\](.+)\[\/b\]/is', '[b]$1[/b]');
$text = $preg_replace('/\[i\](.+)\[\/i\]/is', '[i]$1[/i]');
$text = $preg_replace('/\[u\](.+)\[\/u\]/is', '<u>$1</u>');
//usw
return $text;
}
}
Diese ist krass überlegen, denn sie kann nicht nur einen BBCode, sondern interessiert sich nichtmal für Gross-Kleinschreibung im BBCode-Tag. Nun sagt der Programmierer:
PHP:
$parser = new bessererParser;
Und ab dem Moment steht der neue Parser zur Verfügung. Der Aufruf hingegen ist genau derselbe geblieben:
PHP:
echo $parser->parse('Heute ist ein [b]regnerischer[/b] [u]Tag[/u]');
Mach das mal prozedural. Also dass die Aufrufe identisch bleiben, obwohl der Code komplett ausgetauscht wurde.
Das ist bei einem grösseren Projekt einfach von Vorteil, weil man sich die Schnittstelle, mit der man zu tun hat, vorher überlegen kann. Die ändert sich dann auch nicht mehr. Da der Code, wenn man das korrekt beherrscht, generell fehlerfreier ist, was ein grosser Vorteil ist, sollte man zugunsten der Geschwindigkeit nicht unbedingt mit der Brechstange jedes mögliche Byte einsparen.