2012-07-11 7 views
9

Mi servicio Thrift espera recibir un número entero largo que representa una marca de tiempo en milisegundos, pero viniendo de PHP, sé que se supone que PHP thrift convierte automágicamente mis tipos PHP en tipos de ahorro, pero qué tipo de PHP lo hace esperar para enteros largos? Creo que mi computadora es de 64 bits, pero como creo que la longitud de los enteros PHP depende de la plataforma, realmente no quiero depender de una longitud dependiente de la plataforma para mis enteros.enteros largos PHP para ahorro

Actualmente estoy agarrando microtime() y multiplicando por 1000, luego convirtiendo a entero. ¿Es esta la forma "correcta" de trabajar con PHP & thrilt long ints?

+0

Consulte esto: http://stackoverflow.com/questions/864058/how-to-have-64-bit-integer-on-php –

+0

No es exactamente mi pregunta. Thrift convierte mágicamente tipos a tipos de ahorro, pero no sé qué tipos está dispuesto a convertir. Como dije, realmente no quiero confiar en que tengo arquitectura de 64 bits. – nnythm

+0

¿Por qué tiene que ser un número entero? ¿Qué pasa con las cuerdas? ¿Cómo te estás comunicando con el ahorro? Por HTTP o hay alguna extensión de PHP que le permite hablar con él a través de algún otro protocolo (no sé qué es Thrift, Google produce Apache Thrift)? No veo una razón para forzar un tipo dentro de PHP si todo lo que tienes que hacer es pasar un número que PHP no tiene nada que ver con el sentido de que hace cálculos con él. –

Respuesta

1

Tal vez deberías utilizar Identificación del tipo de cadena como como Twitter: https://dev.twitter.com/docs/twitter-ids-json-and-snowflake

+0

Me estoy conectando a un servicio de Twitter que utiliza longitudes de ahorro. Podría cambiarlo, pero también tendría que cambiar todo el código de Twitter que se engancha, lo cual sería un problema. – nnythm

7

Tiene usted razón,

El tamaño de un entero es dependiente de la plataforma, aunque un valor máximo de aproximadamente dos mil millones es el valor habitual (eso es 32 bits firmado). Las plataformas de 64 bits generalmente tienen un valor máximo de aproximadamente 9E18. PHP no admite enteros sin signo. El tamaño entero se puede determinar usando la constante PHP_INT_SIZE, y el valor máximo usando la constante PHP_INT_MAX desde PHP 4.4.0 y PHP 5.0.5.

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

Si utiliza microtime() usted no necesita dividirlo por 1000. Su flotador, es posible que desee multiplica por 1000.

Es posible utilizar BC Math para calclulate como números, usando tipos de cuerda. Supongo que las cuerdas están bien para comunicarse con cualquier otra cosa.

En caso de multiplicar por 1000, ni siquiera necesita BCMath. Simplemente elimine la coma de la representación de cadena de microtime(true) (o espacio de microtime)

+0

buena llamada, estaba multiplicando por 1000, he cambiado mi pregunta para reflejar esto. – nnythm

+0

Me gustaría darle la recompensa, pero su respuesta no parece abordar la parte de mi pregunta que se refiere a Thrift. ¿Sabe algo acerca de cómo php thrift espera que funcionen enteros largos? – nnythm

+0

@nnythm, lo siento, pero no puedo agregar nada – RiaD