Is choice really supposed to be a double?
The problem I have with this is that doubles don't really guarantee that they are equivalent to an integer. So instead, use comparisons by either casting to an integer, or using >=/<= type comparisons instead of != when you can. Same goes for the carRentalPrice comparison.
This assumes the loop condition is being caused by the choice returned, and not caused by a scanner issue like leaving the tokens in place (which happens when you mix strings and numbers without purging the buffers). You are *likely*(?) mixing the two given the displayMenu and readCustomerInformation methods, but I cannot be sure. It is possible the menu is done via scanner, and the readCustomerInformation is done via serialized object file (which it will have to be if you want to stuff that into reservation) and not read from a scanner. That's simply something we cannot tell.
Walk this all through a debugger instead. Enter per normal and inspect the value of choice when it goes to infinitely loop.
Also, in the future please select a more suitable title for the thread as well as wrapping your code in [php][/php] or [code][/code] tags.
header('HTTP/1.1 420 Enhance Your Calm');