Christian Fein
Erfahrenes Mitglied
Wird Zeit mal wieder eine *hoffentlich* grössere Diskussion in die Wege zu leiten.
Thema PHP und wie eine Sprache trotz massiver Fehler so häufig genutzt wird.
Auf die Gefahr hin das ich mich bei einigen unbeliebt mache, aber PHP ist hässlich inkonsistent, verleitet zu schlechter Programmierung und ist den Konkurrenzsprachen technisch sowie konzeptionell komplett unterlegen.
Da ich nicht einfach so ein Schmähsatz im Raum stehen lassen will, werd ich das mit Beispielen untermauern:
a) PHP ist hässlich:
Darauf gehe ich im Bezug von Inkonsistenz ein.
b) PHP ist inkonsitent:
case sensitiv - case insenstiv
ereg_replace - eregi_replace
str_replace - str_ireplace
strpos - stripos
strcmp - strcasecmp
Allein für die Unterscheidung zwischen Case Sensitiv und Case Insensitiv haben wir 4!! verschiedene Bennenungsvarianten.
str_ireplace <- i anfang 2. wortes
eregi_replace <- ende des 1. wortes
stripos <- irgendwoe dazwischen ein i
strcasecmp <- ein case in den funktionsnamen gemauschelt.
2 Funktionen:
strip_tags
stripcslashes
Wieso einmal mit underscore und einmal ohne? wieso nicht strip_tags und strip_clashes?
oder striptags und stripcslashes? Das zieht sich durch die komplette PHP Funktionsbenennung.
bin2hex oder strtolower. Wieso nicht bintohex u. strtolower bzw bin2hex u. str2lower.
Es resultiert daraus das mann in keiner anderen Sprache die ich kennen gelernt habe, trotz erfahrung so oft in der Referenz nachschlagen muss. Auch dann wenn mann den Namen der Funktion und der Parameter noch im Kopf hat (vor langer Zeit mal genutzt). Alleinig aufgrund der inkonsistenz in der Benennung.
Aufgrund eines fehlenden Konzeptes der Sprache in der Benennung und dadurch das PHP die hässliche Art der Variablen deklaration $var von Perl erbt macht PHP Code zu einem sehr hässlichen Konstrukt. Hässlichkeit von Code hat jedoch auch technische Relevanz da es kryptisch und schwer lesbar wird.
PHP bietet die hässlichkeit von Perl ohne dessen Mächtigkeit zu erben.
c) verleitet zu schlechter Programmierung. Globale Variablen und ein halbherzige OOP unterstützung. Beispielsweise Ausnahmebehandlung. Die Ausnahmebehandlung sieht genauso aus wie bei Java
try {
// mach was böses
} catch(Exception $e) {
echo $e->getMessage(), "\n";
}
Schön! Aber anscheinend haben die PHP Entwickler kein Interresse daran das selber zu nutzen. Denn wieso wirf file() keine Exception wenn die Datei nicht gefunden wird?
Ein PHP Programmierer muss sich selber darum kümmern zu prüfen ob gefunden wird oder nicht, und eine Exception bei Bedarf werfen
Im übrigen wird die OOP Fähigkeit die bei PHP5 nicht mehr ganz so schlimm ist von den PHP Entwicklern komplett ausser acht gelassen. Die Standard lib von PHP umfasst 3000 Funktionen komplett im globalen Namensraum ohne auch nur den Hauch von OOP.
d) Technische Unzulänglichkeiten
Scriptsprachen haben den Vorteil einiges bieten zu können welches mit anderen Sprachen weniger leicht umzusetzen ist. Da währen Closures, Iteratoren, Generatoren, lambda Funktionen (nur eine fehleranfällige create_funktion String Kombination) und und und. PHP bietet vom Sprachumfang nicht mal annähernd die Dynamik die Python, Ruby Perl bieten.
e) Konzeptionelle Unzulänglichkeiten
Globaler Namensraum für alle Funktionen. Keine OOP Unterstützung in der Standardlib.
Keine Ausnahmebehandlung in der Standardlib. Inkonsistenten in der Funktionsbenennung. Keine ordentliche Datenbank Schnittstelle sondern für jede Datenbank komplett verschiedene Funktionen.
ociexecute - Oracle 8
db2_execute - DB2
pg_execute - postgresql
mysql_query -mysql
Nur db2 und postgreSQL ähneln sich bei der Ausführung von Prepared Statements. Da gibts aber dann db2_tables, wo es kein pg_tables gibt. usw und sofort. Ich könnte hier ganze Seiten füllen mit Unterschieden bei den Zugriffen auf nur jene Datenbanken.
Es gibt zwar Bestrebungen das langsam aber sicher anzugleichen, aber der momentane Status ist schlimm. Resultat ist, ein PHP Projekt mal eben von MySQL auf Oracle zu migrieren ist ein extremer aufwand.
Thema PHP und wie eine Sprache trotz massiver Fehler so häufig genutzt wird.
Auf die Gefahr hin das ich mich bei einigen unbeliebt mache, aber PHP ist hässlich inkonsistent, verleitet zu schlechter Programmierung und ist den Konkurrenzsprachen technisch sowie konzeptionell komplett unterlegen.
Da ich nicht einfach so ein Schmähsatz im Raum stehen lassen will, werd ich das mit Beispielen untermauern:
a) PHP ist hässlich:
Darauf gehe ich im Bezug von Inkonsistenz ein.
b) PHP ist inkonsitent:
case sensitiv - case insenstiv
ereg_replace - eregi_replace
str_replace - str_ireplace
strpos - stripos
strcmp - strcasecmp
Allein für die Unterscheidung zwischen Case Sensitiv und Case Insensitiv haben wir 4!! verschiedene Bennenungsvarianten.
str_ireplace <- i anfang 2. wortes
eregi_replace <- ende des 1. wortes
stripos <- irgendwoe dazwischen ein i
strcasecmp <- ein case in den funktionsnamen gemauschelt.
2 Funktionen:
strip_tags
stripcslashes
Wieso einmal mit underscore und einmal ohne? wieso nicht strip_tags und strip_clashes?
oder striptags und stripcslashes? Das zieht sich durch die komplette PHP Funktionsbenennung.
bin2hex oder strtolower. Wieso nicht bintohex u. strtolower bzw bin2hex u. str2lower.
Es resultiert daraus das mann in keiner anderen Sprache die ich kennen gelernt habe, trotz erfahrung so oft in der Referenz nachschlagen muss. Auch dann wenn mann den Namen der Funktion und der Parameter noch im Kopf hat (vor langer Zeit mal genutzt). Alleinig aufgrund der inkonsistenz in der Benennung.
Aufgrund eines fehlenden Konzeptes der Sprache in der Benennung und dadurch das PHP die hässliche Art der Variablen deklaration $var von Perl erbt macht PHP Code zu einem sehr hässlichen Konstrukt. Hässlichkeit von Code hat jedoch auch technische Relevanz da es kryptisch und schwer lesbar wird.
PHP bietet die hässlichkeit von Perl ohne dessen Mächtigkeit zu erben.
c) verleitet zu schlechter Programmierung. Globale Variablen und ein halbherzige OOP unterstützung. Beispielsweise Ausnahmebehandlung. Die Ausnahmebehandlung sieht genauso aus wie bei Java
try {
// mach was böses
} catch(Exception $e) {
echo $e->getMessage(), "\n";
}
Schön! Aber anscheinend haben die PHP Entwickler kein Interresse daran das selber zu nutzen. Denn wieso wirf file() keine Exception wenn die Datei nicht gefunden wird?
Ein PHP Programmierer muss sich selber darum kümmern zu prüfen ob gefunden wird oder nicht, und eine Exception bei Bedarf werfen
Im übrigen wird die OOP Fähigkeit die bei PHP5 nicht mehr ganz so schlimm ist von den PHP Entwicklern komplett ausser acht gelassen. Die Standard lib von PHP umfasst 3000 Funktionen komplett im globalen Namensraum ohne auch nur den Hauch von OOP.
d) Technische Unzulänglichkeiten
Scriptsprachen haben den Vorteil einiges bieten zu können welches mit anderen Sprachen weniger leicht umzusetzen ist. Da währen Closures, Iteratoren, Generatoren, lambda Funktionen (nur eine fehleranfällige create_funktion String Kombination) und und und. PHP bietet vom Sprachumfang nicht mal annähernd die Dynamik die Python, Ruby Perl bieten.
e) Konzeptionelle Unzulänglichkeiten
Globaler Namensraum für alle Funktionen. Keine OOP Unterstützung in der Standardlib.
Keine Ausnahmebehandlung in der Standardlib. Inkonsistenten in der Funktionsbenennung. Keine ordentliche Datenbank Schnittstelle sondern für jede Datenbank komplett verschiedene Funktionen.
ociexecute - Oracle 8
db2_execute - DB2
pg_execute - postgresql
mysql_query -mysql
Nur db2 und postgreSQL ähneln sich bei der Ausführung von Prepared Statements. Da gibts aber dann db2_tables, wo es kein pg_tables gibt. usw und sofort. Ich könnte hier ganze Seiten füllen mit Unterschieden bei den Zugriffen auf nur jene Datenbanken.
Es gibt zwar Bestrebungen das langsam aber sicher anzugleichen, aber der momentane Status ist schlimm. Resultat ist, ein PHP Projekt mal eben von MySQL auf Oracle zu migrieren ist ein extremer aufwand.