Hello Derick,

Sunday, June 5, 2005, 10:27:51 PM, you wrote:

> 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.

Not promoting types would mean adding false++, and true-- doesn't it?
And again not doing this complicaates php needlessly. For example the two
snippets below are different, tell me why:

1) if (($p=strpos(...)+1) > 0) ...
2) $p = strpos(...);
   $p++;
   if ($p > 0) ...

Sidenote: Why is the following a parser error:
   if (($p=strpos(...))++ > 0) ...
-- 
Best regards,
 Marcus                            mailto:[EMAIL PROTECTED]

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

Reply via email to