2012-07-11 5 views
9

Mein Thrift-Dienst erwartet eine lange Ganzzahl, die einen Zeitstempel in Millisekunden darstellt, aber von PHP kommend, weiß ich, dass PHP-Sparsamkeit meine PHP-Typen automatisch in Sparset-Typen umwandelt, aber welcher PHP-Typ macht es erwarten für Long ganze Zahlen? Ich denke, dass mein Computer 64-Bit ist, aber da ich denke, dass die Länge von PHP-Ganzzahlen plattformabhängig ist, möchte ich mich nicht wirklich auf eine plattformabhängige Länge für meine Ganzzahlen verlassen.PHP Lange Ganzzahlen für Sparsamkeit

Ich greife derzeit microtime() und multipliziert mit 1000, dann konvertiert in Ganzzahl. Ist das die "richtige" Art, mit PHP & sparts long ints zu arbeiten?

+0

Bitte beachten Sie: http://StackOverflow.com/Questions/864058/How-to-have-64-Bit-Integer-On-PHP –

+0

Nicht gerade meine Frage. Thrift wandelt Typen magisch in Sparset-Typen um, aber ich weiß nicht, welche Typen konvertiert werden sollen. Wie gesagt, ich möchte mich nicht wirklich darauf verlassen, dass ich auf 64-Bit-Architektur hoffe. – nnythm

+0

Warum muss es eine ganze Zahl sein? Was ist los mit Saiten? Wie kommunizierst du mit der Sparsamkeit? Über HTTP oder gibt es eine PHP-Erweiterung, mit der man über ein anderes Protokoll mit ihm kommunizieren kann (ich weiß nicht, was Thrift ist, google ergibt Apache Thrift)? Ich sehe keinen Grund, einen Typ innerhalb von PHP zu erzwingen, wenn man nur eine Zahl übergeben muss, mit der PHP nichts zu tun hat, in dem Sinne, dass damit gerechnet wird. –

Antwort

1

Vielleicht sollten Sie id von String-Typ als wie Twitter nutzen: https://dev.twitter.com/docs/twitter-ids-json-and-snowflake

+0

Ich hänge mich in einen Twitter-Dienst ein, der Sparsamkeitslöhne verwendet. Ich könnte es ändern, aber dann müsste ich auch den ganzen Twitter-Code ändern, der darin eingreift, was ein Schmerz wäre. – nnythm

7

Sie haben Recht,

Die Größe einer ganzen Zahl ist plattformabhängig, ein Maximalwert von etwa zwei Milliarden der übliche Wert (das sind 32 Bit signiert). 64-Bit-Plattformen haben normalerweise einen maximalen Wert von etwa 9E18. PHP unterstützt keine Ganzzahlen ohne Vorzeichen. Die Integer-Größe kann mit der Konstante PHP_INT_SIZE und der Maximalwert mit der Konstante PHP_INT_MAX seit PHP 4.4.0 und PHP 5.0.5 bestimmt werden.

http://www.php.net/manual/en/language.types.integer.php

Wenn Sie microtime() Sie verwenden müssen es nicht von 1000. Sein Schwimmer zu teilen, sollten Sie es multiplizieren mit 1000

Sie BC Math für calclulate es als Zahlen verwenden, String-Typen verwenden. Ich denke, String ist in Ordnung, um mit anderen Dingen zu kommunizieren.

Im Fall der Multiplikation mit 1000, brauchen Sie nicht einmal . Löschen Sie einfach ein Komma aus der String-Darstellung microtime(true) (oder Leerzeichen von microtime)

+0

guten Ruf, ich habe mit 1000 multipliziert, ich habe meine Frage geändert, um dies zu reflektieren. – nnythm

+0

Ich möchte Ihnen das Kopfgeld geben, aber Ihre Antwort scheint nicht den Teil meiner Frage zu adressieren, der Thrift betrifft. Wissen Sie etwas darüber, wie PHP-Sparsamkeit lange Ganzzahlen erwartet zu arbeiten? – nnythm

+0

@nnythm, sorry, aber ich kann nichts hinzufügen – RiaD