In this episode of “PHP Internals News” I talk with George Banyard (Website, Twitter, GitHub, GitLab) about an RFC that he has proposed together with Máté Kocsis (Twitter, GitHub, LinkedIn) to make PHP’s float to string logic no longer use locales.
The RSS feed for this podcast is https://derickrethans.nl/feed-phpinternalsnews.xml, you can download this episode’s MP3 file, and it’s available on Spotify and iTunes. There is a dedicated website: https://phpinternals.news
- Derick Rethans 0:16
Hi, I’m Derick. And this is PHP internals news, a weekly podcast dedicated to demystifying the development of the PHP language. This is Episode 52. Today I’m talking with George Banyard about an RFC that he’s made together with Mate Kocsis. This RFC is titled locale independent floats to string. Hello, George, would you please introduce yourself?
- George Banyard 0:39
Hello, I’m George Peter Banyard. I’m a student at Imperial College and I work on PHP in my free time.
- Derick Rethans 0:47
All right, so we’re talking about local independent floats. What is the problem here?
- George Banyard 0:52
Currently when you do a float to string conversion, so all casting or displaying a float, the conversion will depend on like the current local. So instead of always using like the decimal dot separator. For example, if you have like a German or the French locale enabled, it will use like a comma to separate like the decimals.
- Derick Rethans 1:14
Okay, I can understand that that could be a bit confusing. What are these locales exactly?
- George Banyard 1:20
So locales, which are more or less C locales, which PHP exposes to user land is a way how to change a bunch of rules on how string and like stuff gets displayed on the C level. One of the issues with it is that like it’s global. For example, if you use like a thread safe API, if you use the thread safe PHP version, then set_locale() is not thread safe, so we’ll just like impact other threads where you’re using it.
- Derick Rethans 1:50
So a locale is a set of rules to format specific things with floating point numbers being one of them in which situations does the locale influence the display a floating point numbers in every situation in PHP or only in some?
- George Banyard 2:06
Yes, it only impacts like certain aspects, which is quite surprising. So a string cast will affect it the strval() function, vardump(), and debug_zval_dump() will all affect the decimal locator and also printf() with the percentage lowercase F, but that’s expected because it’s locale aware compared to the capital F modifier.
- Derick Rethans 2:32
But it doesn’t, for example, have the same problem in the serialised function or say var_export().
- George Banyard 2:37
Yeah, and json_encode() also doesn’t do that. PDO has special code which handles also this so that like all the PDO drivers get like a constant treat like float string, because that could like impact on the databases.
- Derick Rethans 2:53
How is it a problem that with some locales enabled and then uses a comma instead of the decimal point. How can this cause bugs and PHP applications?
Truncated by Planet PHP, read more at the original (another 17468 bytes)