Hi,

Am 03.01.2019 um 10:21 schrieb Zeev Suraski:
On Wed, Jan 2, 2019 at 8:57 PM Nikita Popov <nikita....@gmail.com> wrote:

It's usually the other way around. The current behavior is prone to
breaking integration code, because data interchange layers generally do not
expect floats to use comma separators. The reason why things don't break
quite as terribly as they could is that PHP has introduced a number of
workaround over time, as these issues have been reported. That's why you
usually don't run into this when inserting float values into a DB query, at
least when using prepared statements. This issue is not handled everywhere
though (one recent example I remember is passing floats to bcmath) and I
don't think that introducing more of these special cases is how we should
be approaching this problem.
Again, I'm not disputing that the current behavior isn't desired.  I am
disputing that it's a "no big deal" to change it 20+ years after the fact,
and I am disputing that while many may not be fond of this behavior - they
can still have code that has grown to rely on it over the years.

I do think that if we do decide to change it, it should be while providing
users a long-term (and probably permanent) language level way to keep the
current behavior.  Yes, it's against our motto - but then, so is such a
widescale compatibility breakage without an easy forward path that does not
involve a full line by line code audit.

Would it be possible to write a patch where every float-to-string-conversion that changes the representation because of the locale-setting, would produce a DEPRECATION or NOTICE or similar? The conversion output stays as it is today. Then people could run that patch against their own private projects. Or run against most popular 100 PHP Github projects. Run against 1000 random PHP projects from Github. Or create a specific PHP version that could run on Travis-CI or so...

Currently there is a lot of guessing about the potentially affected libraries and projects, maybe it's better to measure. Then we get numbers of how many affected projects there might be. Maybe it's a huge problem, maybe only 0.001% of the projects are affected, and if they are affected, most likely it's considered a bug, not "intended behaviour". Nobody should rely on the current behaviour, best practice is to use number_format() if needed I think.

If such a DEPRECATION/NOTICE would be emitted in 7.4, 8.0, and 8.x, then people have many years to fix it before the change finally is done in 9.0 or 10.0. We don't have to hurry, this might be a feature with a long period of DEPRECATION/NOTICE, potential bugs can be fixed during the years, before the final change happens. If there are really huge problems that we see during those years (but didn't see while measuring), thousands of developers complaining, in the worst case the change could be reverted.

We should measure first, and then hopefully fix strange behaviour of PHP in the long run.

Michael

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to