On Sun, 5 Jun 2005, Johannes Schlueter wrote: > Hi, > > PHP is a weak-typed language which casts in the background as required - at > least most of the time. I recently found an exception which bugged me: > > $a = false; > $a++; > > Here $a isn't casted to int or "incremented" to true but the incrementing has > no effect. By checking zend_operators.c I saw that booleans had no explicit > incrementing rule but uses just the default in the relevant switch. > > Looking a bit deeper it got quite interesting: NULL++ gives as result the > integer one. This is fine for incrementing undefined variables but imho > inconsistent with the behavior of false. NULL-- evaluates to NULL similar to > false but different from NULL++. > > All this makes using PHP harder than needed. At least I spent quite some time > finding that my variable was set to false instead of 0 (or NULL). > > I wrote the attached patch which allows in-/decrementing of simple types by > casting bools and NULL to long. Yes, it would be a BC break but I don't think > someone relies on false++ being false and it would make life simpler. > > Comments?
I did this a year or so ago, and after discussing with Andi we decided not to promote types in this case. Derick -- Derick Rethans http://derickrethans.nl | http://ez.no | http://xdebug.org -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php