ulrich hat geschrieben:in c oder c++ wĂŒrde ich ein feld von 8 characters verwenden, oder ein feld von 2 integers, oder auch eine struktur, die 2 integers enthĂ€lt.
weiters könnte man den speicherplatz, den ein double (8 byte flieĂkommawert) liefert, miĂbrauchen.
was von den vorgeschlagenen datenstrukturen in php analog und verwendbar zur verfĂŒgung steht, entzieht sich leider meiner kenntnis
Ja, in C wÀrs wirklich schön zu machen
In PHP könnte man sich im Kreis drehen, dort gibt es nÀmlich keine Datentypen und -strukturen, so wie es sie in C gibt.
Man kann auch keine Variable eines bestimmten Typs definieren.
Wenn man eine Variable benötigt, verwendet man sie einfach. Im Hintergrund fĂŒhrt PHP wie wild implizite Typkonvertierungen durch.
Beispiel: man legt eine Variable an und weist ihr den Int-Wert 10 zu:
$var = 10;
Jetzt ist jemand so kreativ und addiert das Zeichen '1':
$var += '1';
In $var steht dann nicht wie in C 10 + der ASCII-Code von '1', sondern 11.
Von welchem Typ $var dann nun ist, weiĂ ich nicht. Vielleicht ists noch ein int, vielleicht aber auch inzwischen ein String, in dem "11" steht.
Normalerweise spielt das aber auch keine Rolle in PHP, da die Datentypen sowieso immer implizit hin und her konvertiert werden, wie sie eben gerade benötigt werden.
Ich kann einer Methode, die einen String erwartet eine Gleitkommazahl mitgeben --> es wird daraus implizit ein String; oder man kann einer mathem. Funktion einen String "123.45" mitgeben -> es wird implizit ein float oder double daraus.
Auch interessant ist die Zuweisung von ganzzahligen Zahlen zu einer Variable: Ist die Zahl nĂ€mlich "klein", wird die Variable PHP-intern ein Integer. (Integers sind intern 32-bit-Werte). Weise ich aber eine gröĂere Zahl einer Variable zu, sodass ein Buffer-Overflow entsteht, wird die Variable implizit ein double.
Und als User (oder besser gesagt PHP-Code-Eintippser) merkt man absolut nichts von diesen mysteriösen Dingen, die die ganze Zeit im Hintergrund ablaufen.
Will man nichts mit Datentypen zu tun, mag das alles ja praktisch sein - braucht man aber einen bestimmten Typen, der einen Wert in einer bestimmten Form speichert, könnte man fast verzweifeln.
In solchen FĂ€llen muss man dann auf Tricks wie pack() zurĂŒckgreifen, wie hier schon jemand geschrieben hat.
Ein anderer Trick, ist die Verwendung von chr(int val). Diese Funktion liefert nÀmlich zu einem numerischen Wert das dazugehörige ASCII-Zeichen.
PHP-intern sind ASCII-Zeichen mangels nativer UTF8-UnterstĂŒtzung immer genau 8 Bit groĂ.
Ruft man zB chr(8 ) auf, bekommt man das entsprechende ASCII-Zeichen zurĂŒck - es ist aber genau 1 Byte lang und hat den Bit-Inhalt 0001000
Um einen 32 Bit Wert zu erzeugen, kann man sich auf diesem Weg die 4 einzelnen Bytes generieren lassen, hÀngt sie zum Schluss zu einem String zusammen, und fertig ist das, was man in anderen Sprachen einfach als unsigend int kennt (oder long)
Ich hoffe ich hab dich jetzt nicht zu sehr verwirrt, aber PHP ist so.