Ist es normal, dass ich z.B. c++ besser verstehe als php?

...komplette Frage anzeigen

5 Antworten

Es ist tatsächlich so, dass PHP ein deutlich schlechteres Sprachdesign aufweist, als C++, aber das ist auch kein Wunder, denn PHP wurde bis vor kurzer Zeit mehr so "nach Bauchgefühl" entwickelt und besitzt noch nicht allzu lange eine vernünftige Spezifikation. C++ hat hingegen seit weit über 20 Jahren einen richtigen ISO-Standard.

Auch, wenn es bei C++ natürlich Inkonsistenzen und viele Unzulänglichkeiten gibt (so wie in jeder Sprache), ist das - verglichen mit PHP - schon fast alles zu vernachlässigen.

Bei C++ gibt es natürlich auch hin und wieder Funktionalitäten, die sich später als ein sog. "Defekt" heraus stellen, einige Dinge lassen sich nur schwierig bis gar nicht vernünftig implementieren, und es gibt Dinge wie "Undefiniertes Verhalten" bzw. "Implementierungsabhängiges Verhalten", die wenigstens klar gestellt werden ohne Fragen offen zu lassen.

Aber all das, ist kein Vergleich mit dem katastrophalen Müllhaufen von PHP-Funktionen: Da PHP sehr beliebt bei Einsteigern ist, und Einsteiger nun mal prinzipbedingt über keinen großen Überblick auf dem Gebiet verfügen, werden mich natürlich vor allem Einsteiger für die obigen Aussagen tadeln, allerdings kann ich - im Gegensatz zu den besagten Einsteigern - all meine Behauptungen auch begründen und belegen. :)

Bei PHP gibt es wenige Funktionen, die eine einzige definierte Aufgabe auch ohne Seiteneffekte so erledigen, wie man es erwarten würde, oder wie es in der Dokumentation steht. Die Sonderfälle kennt jeder, der sich mal die Kommentare unter dem jeweiligen Eintrag unter php.net angesehen hat ... und viele Dinge tauchen nicht mal dort auf. Mit "Workarounds" kommt man bei PHP sehr schnell in Kontakt, oder diese wurden von den Entwicklern eines eingesetzten Frameworks bereits implementiert.

Naja, lange Rede, kurzer Sinn: Es ist erstaundlich, dass dir als Anfänger schon auffällt, wie kaputt PHP eigentlich ist, denn normalerweise benötigt man dafür mehrere Jahre an Erfahrung, vor allem auch auf anderen Gebieten. Oft merken so etwas nicht mal Leute, die sich seit über 10 Jahren als PHP-Profis bezeichnen und bisher noch keinen Blick über den Tellerrand geworfen haben.

Es werden dir zwar viele Leute Dinge sagen, wie "Aber jede Sprache hat so ihre Probleme und Ungereimtheiten", was ja auch stimmt und natürlich auch auf C++ zutrifft, aber das Zauberwort heißt hier "Verhältnis"! Und bei PHP sind die Merkwürdigkeiten wirklich "unverhältnismäßig" hoch; sogar so hoch, dass sie an keine andere mir bekannte Programmiersprache heran kommen.

Ach übirgens, was ich auch schon öfter mal hier geschrieben haben: Der PHP Interpreter ist ja in C programmiert, und ein Paradebeispiel dafür, wie man es NICHT machen soll. Fast JEDE Funktion darin ist eine Perle - im Sinne von Negativbeispiel oder Antipattern. Wer gut C kann, und mal was zum Lachen haben will, der sollte sich mal den PHP 7 Quelltext runter laden ... aber beim Lesen bitte stabil hinsetzen! Vor allem Leuten, die schon mal etwas von "MISRA" oder "CERT-C" gehört haben, wird es die Tränen in die Augen treiben. Garantiert! ;)

Die PHP Entwickler haben offensichltich noch nie etwas von "sicherer Programmierung" und "defensiven Techniken" gehört, ganz zu schweigen von Entwurfsmustern oder der Überprüfung auf Fehler. Wer gerne ausschließlich mit nackten "void *" Zeigern arbeitet, und diese auch gerne mal in double oder wahlweise Integertypen innerhalb der selben (!) Funktion castet (Also den rohen Zeigerwert, nicht den Dereferenzierten!), der wird seine wahre Freude haben.

Momentan sehe ich PHP sprachtechnisch auf dem Stand, auf dem sich C++ mitte der 80er Jahre befand, noch bevor es zur ersten Standardisierung kam. Wobei C++ schon damals die besseren Konzepte hatte, als es ja noch "C with Classes" hieß und mehr oder weniger eine private Spielerei von Bjarne Stroustrupp und seinen Kumpels war. :)

Wie gesagt, mir werden viele widersprechen, aber die meisten von denen haben auch nicht schon seit 1998 in PHP programmieren müssen, gerade als diese Sprache mit Version 3.x den großen Durchbruch erlebte. Damals konnte man PHP noch viel verzeihen, weil eben ALLES irgendwie Frickelei war und die Softwarekrise ihren höchststand. Aber seitdem hat sich die Welt um PHP herum weiter entwickelt, wobei PHP selbst nicht voran kommt. (Von Klimmbimm wie verkorkstem OOP oder Exceptionhandling mal abgesehen.)

Allerdings kann man - wenn man sich auch auf vielen anderen Gebieten, inkl. der Systemprogrammierung gut auskennt - viele der subtilen Fallen von PHP umgehen, und halbwegs akzeptablen Code schreiben. Die Wahrheit ist leider, dass wirklich vernünftiger Code in PHP fast (!) unmöglich ist, auch für Profis, denn dazu ist so viel Boilerplate notwendig, dass selbst kleinste Funktionen in der Länge explodieren, wenn man auf "Sicherheit" aus ist und erst mal einen dicken Wrapper zum absichern schreiben muss. (Wie sich das dann auf die Performanz auswirkt, kann sich jeder denken.)

Als Beispiel habe ich hier bei GF und anderen Fragen schon oft angeführt, dass es mit einer PHP Standardinstallation unmöglich ist, zuverlässig in Dateien zu schreiben und aus denselben lesen zu können. Funktionen wie file_get_contents() oder file_put_contents() enthalten einen Designfehler, wegen dem es unmöglich ist zu garantieren, dass eine Datei nach dem Schreibvorgang auch die Daten enthält, die man ursprünglich auch schreiben wollte.

Außerdem führt ein weiterer Bug in einer der beiden Funktionen zu möglichen Deadlocks und darüber hinaus muss man sehr sehr sehr genaue Kenntnisse über Server, Betriebssystem, Dateisystem und Localeeinstellungen mitbringen,  um diese Funktionen überhaupt portabel und fehlerfrei nutzen zu können.

Anderes Beispiel: Das PDO-Modul für SQLite ist so kaputt, dass Prepared-Statements und Fehlerbehandlung nicht korrekt funktionieren. Laut API-Docs sollten sie das zwar, tun sie aber nicht; und das seit Jahren! Generell ist es bei PHP so, dass Funktionalitäten, die eher weniger genutzt werden, teilweise gar nicht implementiert sind, und nur als Doku-Leichen existieren. Das gilt vor allem für Flags, die auf Drittbibliotheken beruhen und aus diesen zwar übernommen, aber eben nicht implementiert wurden. (z. B. ImageMagick, OpenSSL, & Co.)

Dass solche Fehler nicht nicht gefunden werden, liegt natürlich AUSSCHLIESSLICH daran, dass nicht getestet wurde. Wäre getestet worden, wären diese Fehler sofort aufgefallen. Krass, oder? Das heißt direkt: Die veröffentlichen hier völlig ungetesten Code! Und das ist auch der Hauptgrund dafür, dass PHP so unglaublich viele Fehler hat. (Wer noch etwas zum Lachen haben will: Bitte mal die Code-Abdeckung der mitgebrachten Testfälle des PHP-Interpreters ansehen!)

Um zurück auf C++ zu kommen: Auch hier gab es in der Vergangenheit extreme Designfehlentscheidungen. Aber prozentual gesehen, bewegen sich diese im unteren einstelligen Prozentbereich, während sie bei PHP ganz objektiv gegen 50% tendieren dürften.

Naja, viel Spaß noch beim Lernen! Allerdings solltest du - trotz deiner Aversion - PHP weiter lernen. Man kommt teilweise leider nicht drum herum und auch wenn die Qualität des Interpreters und die Performance immer noch grottig sind, so haben sie sich doch seit PHP 7 deutlich gebessert. Auch wenn es manchmal weh tut, ist ein Blick über den Tellerrand extrem wichtig!

Schönen Tag noch! :)

Tuxgamer2 06.06.2017, 21:11

Hey, nur aus Interesse, was würdest du als bessere Alternative zu php nehmen?

0
TeeTier 07.06.2017, 06:28
@Tuxgamer2

Das kommt darauf an, was ich vor habe. :)

Aber alle anderen mir bekannten Web-Sprachen unterstützen vernünftige IPC-Techniken von Hause aus und haben eine deutlich konsistentere Dokumentation, ganz abgesehen von einem durchdachteren Design. Selbst das uralte Perl noch vor Version 5 ist durchdachter als das neue PHP 7.

Als Alternative würde ich Python, Java oder Erlang nehmen; dann natürlich mit entsprechenden Frameworks. Aber das hängt - wie gesagt - natürlich vom Einsatzzweck ab. Evtl. kommt auch Perl, eine .Net-Sprache oder JS in Frage. Dennoch dürfte PHP in jedem nur erdenklichen Fall, verglichen mit den gängigen Alternativen, die unsauberste Lösung sein.

1

ich habe mir zwar nicht den sourcecode vom interpreter angesehen aber finde es ebenfalls sehr interessant das es bei php total uninteressant ist welchen datentyp ne variable überhaupt hat und das gefühlt alles mit größerer toleranz behandelt wird. trotzdem würde ich mal sagen du vergleichst äpfel mit birnen. beides ist obst aber du kannst es trotzdem nicht so recht miteinander vergleichen

Das liegt wohl an dir. Du kannst doch Latein auch nicht mit Chinesisch vergleichen :-)

Ich fand PHP z. B. super einfach! C++ ist etwas altbacken, aber Geschmackssache.

Das kannst du nicht vergleichen. Das sind beides verschiedene Sprachen

Jeder seins. Ich mag zb php viel lieber weil es einfacher zu verstehen ist (für mich).

Xandoo94 06.06.2017, 11:31

c++ ist eben wesentlich Performanter

1

Was möchtest Du wissen?