10 PHP-Mythen
Kategorie PHP & MySQL
Datum: 27.04.2008, 12:23 - Autor: Manko10
Mit diesem Artikel will ich einmal 10 der häufigsten Missverständnisse, Gerüchte und Halbwahrheiten um das Thema PHP aufklären.Mythos #1
Mythos: String-Variablen müssen in Anführungszeichen gesetzt werden.Wahrheit: Wer sagt das denn? Das ist nun völliger Blödsinn. Variablen können ganz normal als Variablen geschrieben werden. Die Anführungszeichen bzw. Hochkommata sind nur dann nötig, wenn man mehrere Zeichen als String schreiben will. Das ist deshalb so, damit der PHP-Parser diese auch als String erkennt - bei Variablen stupider Unsinn, da diese eh als Variablen erkannt werden und keine bestimmte Kennzeichnung mehr benötigen.
Leider sehe ich immer wieder Konstrukte wie:
| PHP-Code: | ||
|---|---|---|
|
| PHP-Code: | ||
|---|---|---|
|
Mythos #2
Mythos: In Schleifen muss include statt require benutzt werden.Wahrheit: Das ist eine typische Halbwahrheit. Bis zur PHP-Version 4.0.2 stimmte das noch. Hier wurde require immer ausgeführt, auch wenn es laut Programmlogik gar nicht dran war. Zudem wurde es durch die einzubindende Datei ersetzt, sodass nach dem ersten Aufruf kein require, sondern nur noch der Inhalt der Datei zu finden war.
Diese Unterschiede gibt es nun nicht mehr. require und include sind vollkommen gleich. Nur produziert require einen Fatal Error und include nur eine Warning, wenn die Datei nicht gefunden werden konnte.
Mythos #3
Mythos: empty(), isset() und unset() sind Funktionen.Wahrheit: Das stimmt nicht. Alle drei sind Sprachkonstrukte. Im Gegensatz zu anderen Sprachkonstrukten wie echo und require müssen bei ihnen die Klammern jedoch zwangsläufig gesetzt werden, weshalb sie wohl oft mit Funktionen gleichgesetzt werden.
Der Tatsache, dass es Sprachkonstrukte sind, ist es auch zuzuschreiben, dass nur Variablen und keine Funktionen akzeptiert werden.
Mythos #4
Mythos: PHP ist komplett case-sensitive.Wahrheit: Dass PHP case-sensitive ist (also zwischen Groß- und Kleinschreibung unterscheidet) stimmt nur bedingt.
Auf Variablen, Klassenvariablen, Objektvariablen und Konstanten trifft es durchaus zu, auf Funktionen, Methoden und Klassennamen jedoch nicht. meinefunktion(), meineFunktion() und mEiNeFuNkTiOn() sprechen also immer die gleiche Funktion an.
Das soll natürlich nicht dazu anregen, Gebrauch davon zu machen. Es stiftet nur Verwirrung.
Mythos #5
Mythos: Um PHP-Skripte ausführen zu können, ist ein Webserver vonnöten.Wahrheit: PHP wird zwar meist in Verbindung mit einem Webserver genutzt, doch ist dieser nicht zwangsläufig erforderlich. Es gibt durchaus eine Kommandozeilen-Variante von PHP, die ohne Webserver auskommt.
Mythos #6
Mythos: PHP 5 implementiert endlich volle Objektorientierung.Wahrheit: Das stimmt nicht. PHP 5 ist zwar in Sachen OOP um einiges weiter als PHP 4, jedoch wird nicht das gesamte OO-Konzept unterstützt.
So ist zum Beispiel Mehrfachvererbung nach dem Schema
| PHP-Code: | ||
|---|---|---|
|
Ebenso gibt es Probleme mit Vererbung von statischen Methoden.
| PHP-Code: | ||
|---|---|---|
|
Mythos #7
Mythos: Das $_SERVER-Array ist sicher und lässt sich nicht manipulieren.Wahrheit: Ein fataler Trugschluss.
Sicherlich lassen sich viele Indizes nicht manipulieren, doch was ist mit $_SERVER["HTTP_USER_AGENT"]?
Sogar $_SERVER["PHP_SELF"] lässt sich in gewisser Weise manipulieren. Das heißt also, dass Daten des $_SERVER-Arrays ebenso wie alle anderen Eingabedaten behandelt werden müssen.
Mythos #8
Mythos: POST-Daten lassen sich nicht manipulieren.Wahrheit: POST-Daten sind für den unteren Durchschnitt der Skript-Kiddies tatsächlich nicht so einfach zu manipulieren, wie GET-Daten, was ein Grund sein könnte, diese Methode zu nutzen, aber POST-Daten sind AUF KEINEN FALL sicher! Sie sind ebenso unsicher wie GET-Daten. Wenn man POST als primäre Submit-Methode benutzt, bietet man eine Manipulation lediglich nicht so einladend und offensichtlich an, sie ist aber in keinem Falle unmöglich. Bitte hier bloß kein falsches Sicherheitsgefühl entwickeln.
Mythos #9
Mythos: Datenbankverbindungen müssen wieder geschlossen werden.Wahrheit: Datenbankverbindungen wieder zu schließen, gehört zwar zum feinen Stil, ist aber nicht notwendig. Sind nach Skriptende noch Verbindungen offen, so werden diese automatisch geschlossen.
Mythos #10
Mythos: true und false stehen für 1 und 0.Wahrheit: Nein, true und false stehen für "wahr" und "unwahr".
Es gibt einen großen Unterschied zwischen "sein" und "gelten als". 0 gilt zwar als false, ist es aber nicht. So ist die Bedingung
| PHP-Code: | ||
|---|---|---|
|
| PHP-Code: | ||
|---|---|---|
|
Man stelle es sich wie ein Notebook und ein Macbook vor. Beide gelten als Computer, aber ein Notebook ist auf keinen Fall dasselbe wie ein Macbook.
Seiten: (1/1) 1
7 Kommentare:
Mythos 6
Datum: 17.05.2008, 22:56 - Autor: Gast
Hallo,Mythos #6 stimmt so nicht, bzw. die Begründung nicht:
"So ist zum Beispiel Mehrfachvererbung nach dem Schema"
Es gibt viele Sprachen die keine Mehrfachvererbung, wie z.B. in C++, zulassen, dazu gehören unter anderem Java oder C#.
Dies ist auch in den meisten Fällen gut so, da sich so das Diamond-Problem vermeiden lässt.
Das PHP keine OO Sprache ist, ist nicht haltbar:
"Objektorientierte Programmiersprachen besitzen einen speziellen Datentyp – das Objekt. Damit ermöglichen sie die Objektorientierung"
Nur aufgrund dessen PHP nicht als 'voll Objektorientiert' zu benennen, lässt sich nicht halten.
Ansonsten wäre ich über eine (seriöse) Quelle erfreut, die festlegt, wann eine Sprache als voll Objektorientiert gilt, denn Google liefert nichts brauchbares (alles nur Halbwahrheiten, keine Definitionen etc.).
Oder wurde dies evt. mein rein Objektorientiert verwechselt? Denn dies ist PHP ganz gewiss nicht.
Grüße
Datum: 18.05.2008, 16:15 - Autor: Manko10
Hallo,deine Argumente sind durchaus richtig. Rein objektorientiert ist PHP auf keinen Fall, das ist klar. Eine exakte Definition abzuliefern, wann eine Sprache vollständig Objektorientierung beherrscht, ist natürlich auch schwer. Sagen wir es mal so: PHP hat mit der Version 5 einen riesigen Schritt von Objekten, die intern als Arrays gehandhabt wurden, zu echten Objekten gemacht.
Daraus hervorgehend, dass PHP keine rein objektorientierte Sprache ist, ist PHP auf jeden Fall auch nicht modular, wie es zum Beispiel JavaScript ist. Man kann PHP also als Sprache, die Objektorientierung bietet bezeichnen, aber wohl nicht als Sprache, die alle denkbaren Konzepte der Objektorientierung bietet. Hier stellt sich dann aber auch die Frage, ob das jemals eine Sprache erreichen kann.
Die Definition ist nämlich tatsächlich recht unscharf. Nehmen wir z.B. das Problem der Vererbung statischen Kontexts. Ist es hier wirklich korrekt, dass dieser durch den Kontext der Kindklasse überschrieben wird, oder sollte es doch im Kontext der Parent-Klasse ausgeführt werden? Logisch wäre eine Überschreibung, aber auch gewollt?
Zum Diamond-Problem: das ist natürlich auch vollkommen korrekt. Aber hier könnte man vom Prinzip der Überschreibung, also der Kaskadierung, ausgehen. Das Letzte überschreibt alles Vorige. So würde die zuletzt angegebene Parent-Klasse die höchste Priorität besitzen.
Also in sofern: vielen Dank für deine konstruktive Ergänzung bzw. Verbesserung.
Liebe Grüße
Manko10
Anregung
Datum: 26.07.2008, 11:40 - Autor: StarSt0rm
Ich habe noch einen kleinen Vorschlag für dich.Da ich deine Seite öfters verwende um auf gute Lösungen aufmerksam zu machen, oder einfach den Leuten zeigen wie sie ih Script besser schreiben (zum Beispiel Mythos #1), würde es etwas besser sein, wenn man direkt an die richtige Stelle verlinken könnte.
Es wäre echt klasse, wenn man direkt auf die Überschriften verlinken könnte (Anker).
Liebe Grüße
Alex
Datum: 27.07.2008, 21:38 - Autor: Manko10
Hallo Alex,ich werde deinen Vorschlag gerne aufnehmen, hatte ich doch selbst schon Ähnliches vor.
Liebe Grüße
Manko10
Datum: 28.07.2008, 22:48 - Autor: Manko10
So, diese Funktionalität wurde hinzugefügt.Bitte leere auch einmal deinen Cache, da ich das CSS-File ein wenig verändert habe.
nikosch
Datum: 08.01.2010, 19:19 - Autor: Gast
Mythos #8 würde ich textlich noch mal überarbeiten. „nicht so einfach“ finde ich nicht sehr aussagekräftig und ein Formular offline zu speichern und umzubasteln finde ich ziemlich simpel. Geschweige denn die ganzen Browser-Add-ons.Datum: 08.01.2010, 19:39 - Autor: Manko10
Uh, diese Seite ist uralt und da bedarf einiges einer Überarbeitung. Aber #8 war tatsächlich etwas schwammig formuliert. Ich habe es geändert.Danke!