So richtig den Sinn habe ich davon auch noch nicht verstanden.
Ganz einfach formuliert:
Einsparen von Entwicklungszeit auf Kosten von Performance
Also, was haltet ihr von PHP-Frameworks? Nötig? Überbewertet? Unsinnig? Wer arbeitet damit?
Ich arbeite vorwiegend mit "TYPO3" also mit dem unbenannten Framework, da ja FLOW3 und ext_base noch nicht wirklich "fertig". Mit der nötigen Erfahrung arbeitet man damit wesentlich schneller (und weniger Fehleranfällig) als zu Fuß.
Ein Beispiel ist eine simple Abfrage um alle Datensätze aus dem Seitenbaum (flach) abzuholen die angezeigt werden dürfen:
$query = $GLOBALS['TYPO3_DB']->SELECTquery(
"*",
"pages",
"1=1" . $this->cObj->enableFields('pages'),
);
$res = $GLOBALS['TYPO3_DB']->sql(TYPO3_db, $query);
while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
$this->pages[] = $row;
}
Unter dem Strich ist das nicht wesentlich kürzer als das ganze per Hand mit mysql(i)-Funktionen zu schreiben, hat aber den essentiellen Vorteil, dass man sich um nichts kümmern muss.
Die Abstraktionsschicht sorgt dafür, dass ich nur Tabellen und Felder Benutzer kann, die auch tatsächlich für TYPO3 bekannt sind und existieren (als in ext_tables.php konfiguriert sind). Dass jemand mittles einer Injection Informationen aus einer anderen, nicht zum CMS gehörigen Tabelle in derselben Datenbank abholt ist weitgehend ausgeschlossen. Weiters muss ich mich nicht um die Datenbankverbindung selbst kümmern - ob das jetzt MySQL ist oder ein anderes DMBS spielt hier keine Rolle ADOdb "wirds schon richten".
Die enableFields-Methode sorgt davor, dass automatisch Bedingungen gesetzt werden, die das Abfragen "verbotener" Datensätze unterbinden: sprich hier werden einfache Dinge wie "Datensatz ist gelöscht" oder "erst ab einem gewissen Zeitpunkt aktiv" automatisch geprüft, selbstverständlich werden auch erweiterete Dinge wie z.B. Benutzer- und Gruppenrechte geprüft - ensprechend dem, was (wie auch zuvor) in ext_tables definiert ist. Zusätzlich wird noch der Workspace geprüft.
Im Klartext sieht die Prüfung (ohne rekursiv Rechte im Baum zu beachten) so aus - für Abfragen bei einer aktiven Benutzersession kommt noch einiges dazu.
AND pages.deleted=0 AND pages.t3ver_state<=0 AND pages.pid!=-1 AND pages.hidden=0 AND pages.starttime<=1347547560 AND (pages.endtime=0 OR pages.endtime>1347547560) AND (pages.fe_group='' OR pages.fe_group IS NULL OR pages.fe_group='0' OR (pages.fe_group LIKE '%,0,%' OR pages.fe_group LIKE '0,%' OR pages.fe_group LIKE '%,0' OR pages.fe_group='0') OR (pages.fe_group LIKE '%,-1,%' OR pages.fe_group LIKE '-1,%' OR pages.fe_group LIKE '%,-1' OR pages.fe_group='-1'))
Wenn man schon lange per Hand gearbeitet hat und dann in ein komplexes Framework einsteigt, dauert das mitunter Jahre bis man auch nur ansatzweise den "kompletten" Umfang kennt - es hat aber den essentiellen Vorteil, dass ein Kenner des Systems ohne Probleme damit arbeiten kann.
Bei obenstehenden Beispiel kann man sich drauf verlassen, dass hier alle nötigen Dinge beachtet werden - wenn jemand auf die Idee kommt, dass er plötzlich bei irgend einer Tabelle die Liste der enableFields um eines erweitert, wissen automatisch alle Abfragen die mit enableFields arbeiten darüber Bescheid und jeder der sich mit dem Framework auskennt wird auch wissen, dass das ein Punkt ist, um den man sich hier nicht kümmern muss.
Der Nachteil ist die Einarbeitungszeit und natürlich der zusätzliche Ressourcenbedarf weil das Framework eine Abstraktionsschicht zwischen Programmierer und Programmiersprache darstellt - aber dafür werden die Anwendungen idR. weniger Fehleranfällig und sind schneller fertig.