2012-07-11 17 views
9

Moja usługa oszczędzania oczekuje otrzymania długiej liczby całkowitej reprezentującej znacznik czasu w milisekundach, ale pochodzącej z PHP, wiem, że oszczędzanie PHP ma zautomatyzować przekształcanie moich typów PHP w typy oszczędzania, ale który typ PHP to robi spodziewać się długich liczb całkowitych? Myślę, że mój komputer jest 64-bitowy, ale ponieważ uważam, że całkowita długość PHP jest zależna od platformy, tak naprawdę nie chcę zależeć od długości zależnej od platformy dla moich liczb całkowitych.Długie liczby całkowite w PHP dla oszczędzania

Aktualnie przechwytuję mikrotime() i mnożę przez 1000, a następnie konwertuję na liczbę całkowitą. Czy jest to "poprawny" sposób pracy z PHP & oszczędzania długich ints?

+0

Proszę odnieść się do tego: http://stackoverflow.com/questions/864058/how-to-have-64-bit-integer-on-php –

+0

Niezupełnie moje pytanie. Oszczędzanie magicznie konwertuje typy na typy oszczędzania, ale nie wiem, które typy jest w stanie konwertować. Jak już wspomniałem, tak naprawdę nie chcę polegać na tym, że mam architekturę 64-bitową. – nnythm

+0

Dlaczego musi to być liczba całkowita? Co jest nie tak z ciągami? W jaki sposób komunikujesz się z oszczędzaniem? Przez HTTP lub czy jest jakieś rozszerzenie PHP, które pozwala rozmawiać z nim przez jakiś inny protokół (nie wiem, czym jest Thrift, Google zapewnia Apache Thrift)? Nie widzę powodu, aby wymuszać typ w PHP, jeśli wszystko, co musisz zrobić, to przekazać liczbę, której PHP nie ma nic wspólnego z tym, że wykonuje z nią obliczenia. –

Odpowiedz

1

Może trzeba zastosować identyfikator typu string jako jak Twitter: https://dev.twitter.com/docs/twitter-ids-json-and-snowflake

+0

Zajmuję się usługą twittera, która korzysta z długookresowych oszczędności. Mógłbym to zmienić, ale potem musiałbym zmienić cały kod na twitterze, który się w nim wbije, co byłoby uciążliwe. – nnythm

7

Masz rację,

Rozmiar liczb całkowitych jest zależne od platformy, choć maksymalna wartość około dwóch miliardów jest zwykła wartość (to jest podpisane 32 bity). Platformy 64-bitowe mają zwykle maksymalną wartość około 9E18. PHP nie obsługuje liczb całkowitych bez znaku. Wielkość całkowita może być określona przy użyciu stałej PHP_INT_SIZE, a maksymalna wartość przy użyciu stałej PHP_INT_MAX od PHP 4.4.0 i PHP 5.0.5.

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

Jeśli używasz microtime() nie trzeba podzielić przez 1000. Jego pływaka, może chcesz pomnożyć przez 1000.

Można użyć BC Math dla calclulate to jak numery, za pomocą typów ciągów. Zgaduję, że ciąg jest w porządku, aby komunikować się z innymi rzeczami.

W przypadku pomnożenia przez 1000, nawet nie potrzebujesz BCMath. Po prostu usuń przecinek z reprezentacji ciągów microtime(true) (lub spacja od microtime)

+0

Dobra rozmowa, mnożyłem się przez 1000, zmieniłem moje pytanie, aby to odzwierciedlić. – nnythm

+0

Chciałbym dać ci nagrodę, ale twoja odpowiedź nie odnosi się do części mojego pytania dotyczącego oszczędzania. Czy wiesz cokolwiek o tym, jak php oszczędza długie liczby całkowite do pracy? – nnythm

+0

@nnythm, przepraszam, ale nie mogę nic dodać – RiaD

Powiązane problemy