On 21 Jan 2008, at 19:38, Tomas Kuliavas wrote:
5) this is yet another reincarnation of ze1_compatibility switch.
Which is the worst mistake ever imo - If you wanted PHP 4 you would
simply
use PHP 4. Now if you want PHP 5 just damn use PHP 5.
And if you don't control PHP version used by end user? Only bad in-
house
apps are written for one specific PHP version and setup.
you're point being? Without the requested change here you would
have one
more version, resulting in PHP 5.*, PHP 6.*-unicode, PHP6.*-native.
there is only a little difference between php5 and php6 with
unicode.semantics off. php6 with unicode.semantics on design is
broken. It
replaces standard functions that worked same way through all PHP4-5
versions and forces use of code that is totally backwards
incompatible.
I wholly agree that this is idiotic — I'd much rather see an approach
to Unicode strings like there is in Python, namely that any string is
binary data unless explicitly prefixed by u (e.g., gettype('a') ==
'binary' && gettype(u'a') == 'unicode'). We already have support for
similar syntax in the form of b'…'. This alternative, unlike the
current situation, allows code written for PHP < 6 to run on PHP 6
without issue.
binary and unicode typecasting triggers E_PARSE errors in older PHP
versions. I can't mix PHP6 and older PHP code in one script or
library or
function.
(binary) is fine on PHP 5.2.1 and above, though it's still a far from
ideal situation (as it relies on unicode.runtime_encoding unlike
b'…'). It is most certainly possible to get code working on both PHP 5
and PHP 6, but it requires a lot of verbose code (that can, on the
upside, all be abstracted into unicode/binary classes that each deal
with a different string type (which also gives an excuse for a PHP 5
userland implementation of unicode, so you can rely on unicode support
on both PHP 5 and PHP 6)).
PHP introduced changes similar to unicode.semantics=on with mbstring
function overloading. When I learned about it, I've stopped trusting
ereg
and string functions. With mbstring overloading I still have options
to
disable broken design. With unicode semantics I am forced to use
features
provided by interpreter instead doing things the way I want and having
better controls over script.
I already refuse to support mbstring.func_overload as there is
absolutely no way to get back to dealing with binary strings. If PHP 6
continues on how it is I may well end up not supporting it either.
If PHP 6 breaks backwards compatibility I'd rather it did so far more
sweepingly, without options to give the allusion of it being
compatible with previous versions.
--
Geoffrey Sneddon
<http://gsnedders.com/>
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php