PHP Assoziiertes Array gibt Integerzahl als String aus

Überkinger

Lieutenant
Registriert
Juli 2010
Beiträge
600
Hallo,

ich beziehe aus einem mysql INT(14) Datenfeld ein Unix-Zeitstempel, der als assoziiertes array via While-Schleife ausgelesen wird. Wieso wird daraus nun aber ein String gemacht und keine Integerzahl'?

PHP:
while ($array = mysql_fetch_array($result,MYSQL_ASSOC)) {
$timestamp = $array["date"];
}

var_dump();

["date"] => string(10) "1363588984"
 
rumbalotte schrieb:
weil das PHP in dem Moment ziemlich Wurst ist

Wieso ist das dann wurscht, wenn nach einem

PHP:
$date = (int)$date;

noch immer ergibt:

["date"] => string(10) "1363588984"
 
PHP ist eh Datentypenlos, kannst den Wert einfach als Int behandeln, macht PHP ohne Murren.
 
rumbalotte hat Recht, PHP kennt die Datentypen zwar, aber wandelt alles automatisch ohne das man etwas davon merkt um. Daher behandel den Wert einfach als Integer, das geht ohne Probleme..
 
Hi,

erzählt doch hier nicht so einen Käse bitte! Selbstverständlich gibt es typisierte Variablen und explizite Typkonvertierung und natürlich ist PHP nicht "datentyplos"!

Sonst würde das hier:

Code:
<?php
// String
$zahl = "100";
echo var_dump($zahl);
// Integer
$zahl = (int) $zahl;
echo var_dump($zahl);
?>

auch nicht funktionieren. Es muss also an etwas anderem liegen - "PHP ist das wurscht", klasse Argument...

VG,
Mad
 
(int) ist wie intval() nur ein typecasting, d.h. ein container
innerhalb dieses containers bleibt es eben ein string, wie so alle variableninhalte, welche auf einzelne daten (also nicht arrays, objekte, klassen, callbacks, konstanten) verweisen

das PHP das je nach Bedarf als int, float, was auch immer oder weiterhin als string behandelt, steht auf nem ganz anderem Blatt
 
Wieso ist das dann wurscht, wenn nach einem

$date = (int)$date;
noch immer ergibt:

["date"] => string(10) "1363588984"
Wenn du den Datentyp der Variable änderst, dann ist nicht automatisch der Variablentyp innerhalb des Arrays mitgeändert

Also
var_dump($date);
sollte dann schon int ausgeben
 
KarlEgon schrieb:
Wenn du den Datentyp der Variable änderst, dann ist nicht automatisch der Variablentyp innerhalb des Arrays mitgeändert

Also
var_dump($date);
sollte dann schon int ausgeben

Okay, das klappt. Ist es zwingend notwendig, in INT zu konvertieren? Ich möchte mit Zeiten rechnen, die in der Vergangenheit und Zukunft liegen. Basis ist stets der Unix-Zeitstempel.
 
Zuletzt bearbeitet:
@Madman: PHP ist nun einmal, wie einige andere Sprachen, schwach typisiert. Das hat Vor- und Nachteile (z.B. bei ==0 vs. ===0). In diesem Falle greift die schwache Typisierung. (string)1234 = (int)1234. Es ist tatsächlich total Wumpe. Wenn du es konkatenierst, eine preg_replace-Funktion drauf ausführst oder sowas, dann ist es ein String. Wenn du es addierst, multiplizierst, potentierst,... ist es ein Integer. Im nächsten Moment kann es genauso ein Float sein.
 
Hi,

@Daaron

Danke, das weiß ich ;) Es ist aber ein Unterschied zwischen "schwacher Typisierung" und

PHP ist eh Datentypenlos

Und sofern ich explizit Typisiere ist es schlicht sauberer - ob PHP intern dann anders damit verfährt ist mir als Entwickler dann tatsächlich egal, zumindest hat man sauber lesbaren, klar verständlichen Code. Der nächste der nach mir ran muss wird es mir danken und ich muss mir am Ende auch nichts vorwerfen lassen ;)

Ich denke, das kann man durchaus so stehen lassen und nichts anderes wollte ich zum Ausdruck bringen. "schwach typisiert" != "nicht typisiert" :)

VG,
Mad
 
Hmmm... jap.
Ich versuch mir ja auch inzwischen bei Funktionsdeklarationen die Datentypen vor die Parameter zu schreiben. Gerade wenn ich wieder Contao-Module in Eclipse umhacke ist es sehr nützlich, wenn bei nem Callback eben on_irgendwas_callback(DataContainer $dc) statt einfach nur ($dc) steht.

Das hindert mich dann aber halt trotzdem nicht, totalen Blödsinn zu schreiben wie $dc = $this->Database->prepare("SELECT * FROM table WHERE id=?")->execute($dc->id);
 
Zurück
Oben