In case of "> is_string(): Z_TYPE_P() == IS_STRING || Z_TYPE_P() == IS_UNICODE", is_string() will return TRUE for binary data in unicode mode.
It should be: is_string(): Z_TYPE_P() == (UG(unicode)?IS_UNICODE:IS_STRING) is_binary() and is_unicode() are OK. Thanks. Dmitry. > -----Original Message----- > From: Marcus Boerger [mailto:[EMAIL PROTECTED] > Sent: Wednesday, March 15, 2006 1:48 PM > To: Derick Rethans > Cc: Unicode Mailinglist > Subject: Re: [PHP-I18N] is_string() > > > Hello Derick, > > Wednesday, March 15, 2006, 10:24:37 AM, you wrote: > > > Hello! > > > The past few days I've been trying to get some of our code > to run on > > PHP > > 6 with unicode semantics turned on to be able to provide some > > benchmarking. Ofcourse I found some BC breaking behavior, where the > > following one is bringing the largest WTF factor: > > > <?php > > $str = "hautamaekki"; > > var_dump( is_string( $str ) ); > > ?> > > > [EMAIL PROTECTED]:/tmp$ php-6.0dev /tmp/string-test.php > > bool(false) > > > (The reason for this is that is_string() now returns true > for *binary* > > strings only). I prepared a patch [1] which reverts > is_string() back to > > the "expected" behavior. This patch is also in line with > the notes from > > the PDM [2]. Andrei argued that is_string() and (string) > should work on > > binary strings and is_unicode() and (unicode) for "real" strings. > > However I think it is a much better idea to use > is_binary()/(binary) and > > is_string()/(string) instead as this will not break so much > code. To > > illustrate this with another example that I encountered in > PHPUnit2 when > > trying to get our code running: > > > In Framework/TestSuite.php there is the following code (shortened): > > > public function __construct($theClass = '', $name = '') { > > $argumentsValid = FALSE; > > > if (is_object($theClass) && > > $theClass instanceof ReflectionClass) { > > $argumentsValid = TRUE; > > } > > > else if (is_string($theClass) && $theClass !== '' && > > class_exists($theClass)) { > > > Which is f.e. called with (ezcTestSuite inherits the > PHPUnit2 TestSuit > > class): > > > public static function suite() > > { > > return new ezcTestSuite( "ezcConsoleToolsInputTest" ); > > } > > > This does not work anymore with PHP 6 as the string is now > suddenly no > > string anymore... highlight confusing I would say. > > > Can we please use is_binary()/(binary) for binary string types and > > is_string()/(string) for real strings as per PDM notes? > > > regards, > > Derick > > > > [1] > > > http://files.derickrethans.nl/patches/uc-is_string-2006-03-15.diff.txt > > [2] > http://www.php.net/~derick/meeting-notes.html#different-string-types > > I would prefer a slightly different approach and make > is_string() return true for both native and unicode strings. > This would lead to the following > layout: > > is_string(): Z_TYPE_P() == IS_STRING || Z_TYPE_P() == IS_UNICODE > (string): bypass native + unicode, convert according to > unicode mode; make_printable_zval > > is_binary(): Z_TYPE_P() == IS_STRING > (binary): bypass native; make_string_zval > > is_unicode(): Z_TYPE_P() == IS_UNICODE > (unicode): bypass unicode: make_unicode_string > > which to me makes pretty much sense. The point is that we > still have automatic conversion mostly everywhere or will get > it nearly everywhere sooner or later. So when dealing with a > string variable it doesn't really matter what kind it is and > if so one has the ability to check for the exact type. > > Best regards, > marcus > > -- > PHP Unicode & I18N Mailing List (http://www.php.net/) > To unsubscribe, visit: http://www.php.net/unsub.php > > > -- PHP Unicode & I18N Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php