Neuigkeiten:

still alive...

Hauptmenü

Typensystem in PHP

Begonnen von helmut, 29. Juli 2005, 14:09:38

Vorheriges Thema - Nächstes Thema

helmut

hallo leutz!
ich hab mal ne ganz allgemein frage zu php.
mir hat neulich ein informatiker erzählt, der mit c++..... programmiert, dass php ein großes problem hat.
und zwar:
es werden keine einheitlichen variablentypen am anfang festgelegt (z.b. integer, real, string......).
das würde bzw. könnte seiner meinung nach dazu führen, dass man probleme bekommt, wenn nutzer falsche eingaben machen oder die variable einfach durch nen programmierfehler den falschen wert zugewiesen bekommt.
dann geht das skript z.b. in ne endlosschleife oder wichtige daten werden überschrieben....
meistens kann man sich vorher gar nicht den schaden ausmalen, den so eine fehlende typenangabe und die daraus resultierende freie festlegung des inhalts einer variablen so anrichten kann. er (der informatiker) kenne es gar nicht anders als typen direkt zu definieren.
daraufhin habe ich gesagt, dass ich da eigentlich noch nie probleme hatte und dass man die typenkonvertierung in wichtigen fällen auch mit bestimmten funktionen erzwingen kann bzw. dass man den typ einer variablen auch auslesn lassen kann.
daraufhin er wieder: \"ja das kann schon sein, aber wenn man die typen gleich definieren würde, dann müsste man nicht alles überprüfen (zusätzliche rechenzeit...) und es kann ja auch alles 10000000 mal durchlaufen ohne fehler und beim 10000001. mal gibt der user was falsches ein und schon haste \'n problem.\"
so, nun frage ich euch:
denkt ihr, dass php dringend eine typendefinierung..... braucht?
grüße,
helmut

Ich arbeite das jetzt einfach mal ab /uploads/emoticons/icon_e_wink.gif.3167d127940f44558fbf1ccd9b6d60a9.gif\" alt=\";-)\" />

Original von helmut es werden keine einheitlichen variablentypen am anfang festgelegt (z.b. integer, real, string......).
das würde bzw. könnte seiner meinung nach dazu führen, dass man probleme bekommt, wenn nutzer falsche eingaben machen oder die variable einfach durch nen programmierfehler den falschen wert zugewiesen bekommt.
[/quote]
Erstmal muss man sagen, dass die Variablentypen auch in php festgelegt werden, aber eben nicht im Skript, sondern die benötigten Variablen werden vor dem Skriptstart alloziiert (Speicherplatz wird reserviert). Und bitte sag deinem Kollegen, dass man mittels PHP die Variablen auch casten kann, d.h. man kann ihnen einen Variablentyp aufzwingen und somit wäre eine \"Gefahr\" gebannt. Allerdings hat recht, wenn er sagt, dass durch fehlerhafte Eingaben das Skript \"manipuliert\" werden kann, aber wo ein Benutzer eingaben tätigt, entstehen nunmal Fehler, außerdem bietet PHP sehr gute Möglichkeiten, um Variablen zu validieren und somit das Skript zu sichern, außerdem werden Buffer Overflows, die durch eine Kombination aus Fehlern im Quellcode und böswilliger Eingaben seitens des Clients entstehen, durch die PHP Engine unschädlich gemacht.

Original von helmut dann geht das skript z.b. in ne endlosschleife oder wichtige daten werden überschrieben....
[/quote]
Das ist möglich, wenn das Skript schlampig geschrieben wurde, aber es lässt sich auch ganz einfach vermeiden. Das Überschreiben von Variablen kann man ganz einfach abwenden, wenn man register_globals, also alle Variablen, die von \"Außen\" kommen(GET = URL, POST = Formulardaten, COOKIE = gespeicherte Daten vom Client), auf Off stellt.

Original von helmut meistens kann man sich vorher gar nicht den schaden ausmalen, den so eine fehlende typenangabe und die daraus resultierende freie festlegung des inhalts einer variablen so anrichten kann. er (der informatiker) kenne es gar nicht anders als typen direkt zu definieren.
[/quote]
Es stimmt, dass der Schaden durch solche Angriffe sehr hoch sein kann, da man im Worst Case auch auf der Betriebssystemebene weiter manipulieren kann. Außerdem sollte man PHP nicht mit einer ernstzunehmenden Programmiersprache verwechseln, denn es ist bzw. war (seit der Einführung von php-cli wohl nicht mehr ganz) \"nur\" eine Skriptsprache und die Einfachheit von PHP macht unter anderem auch das Fehlen von Variablentypendefinitionen aus.

Original von helmut ja das kann schon sein, aber wenn man die typen gleich definieren würde, dann müsste man nicht alles überprüfen (zusätzliche rechenzeit...) und es kann ja auch alles 10000000 mal durchlaufen ohne fehler und beim 10000001. mal gibt der user was falsches ein und schon haste \'n problem.
[/quote]
Um das beantworten zu können, muss ich ein wenig mehr ausholen. Zuerst einmal werde ich die Unterschiede von PHP, einem Parser und C++ klar machen.
Bei C++ werden die Variablen definiert, dann wird das Programm abgearbeitet. Bei PHP geht der Parser zuerst das Skript durch und übersetzt dieses in seine eigene Sprache. Dabei würfelt er Variablen, Funktionen, Klassen und weitere Strukturen heraus, die nachher dem Skript zur Verfügung stehen müssen. Jede Variable wird in PHP, d.h. besser gesagt in C, in einem struct ähnlichen Objekt gespeichert, dessen Name mir gerade nicht einfällt /uploads/emoticons/icon_e_biggrin.gif.1a84f5257b36e14b36d04985314f877f.gif\" alt=\":-D\" />, dieses Objekt kann man sich wie ein Array vorstellen, welches verschiedene Grundtypen beinhaltet, also einen \"String\" bzw. ein Char-Array(Zeichenketten), Integer(Ganzzahlen) und Double(Kommazahlen).
PHP setzt dann die Eingabe in einen von dieser Typen ein, also wenn eine 1 per Post gesendet wird, wird dieser Wert in dem Struct als Integer gespeichert usw.
Um wieder auf den Kern der Aussage zu kommen, bei C++ wird folgendes Schema abgearbeitet, wenn eine Ausgabe seitens des Clients abgearbeitet wird: Variablen(-typen)deklaration, dann folgt die Eingabe, dann die weitere Programmlogik. Bei PHP ist es so: Benutzereingabe ist bereits erfolgt, dann weist das Skript die Variablen automatisch ihrem Typ zu, dann folgt die Programmlogik. Es sind also sehr verschiedene Verarbeitungsmechanismen, die man nicht unbedingt vergleichen kann.
Ne Typendefinierung würde eine völlige Umstrukturierung der Skriptsprache PHP mitsichbringen, da dann der Parser die Typen nicht mehr im Weg sein dürfte und man die Skripte somit kompilieren müsste.
Was für ein Roman /uploads/emoticons/icon_e_surprised.gif.a8707b3f35a569cb4cfe563fc72ef78d.gif\" alt=\":-o\" />,
Der Tom
 - Editiert von electr0n am 31.07.2005, 21:33 -

helmut

danke erstmal.
ich hoffe, ich habe jetzt wieder ein paar argumente für php in der tasche, wenn unser kleiner \"wg-streit\" /uploads/emoticons/icon_cool.gif.a496227c54473879688932bc113a4bbd.gif\" alt=\"8-)\" /> in eine neue runde geht.
er sagt halt, dass php ja an sich nicht schlecht ist. er ist es hat nur von seinem informatik-studium gewöhnt, dass variablen nen typ bekommen...
also, man liest sich
bis bald
der helmut
*** PHP RULEZ!!! ***

all your base are belong to us / Discord