[PHP] PHP is Zero

2013-06-13 Thread BUSCHKE Daniel
Hi all,
I want to start a discussion about a PHP behaviour that drives me crazy for 
years. For the beginning I would like you to guess what the result of the 
following snippet will be:

var_dump('PHP' == 0); 

I know the difference of == and === but the result was unexcpected for me. And 
I hope it is also for you. The result is simply true. Why is it true? I guess 
this happens because of the conversion from 'PHP' to a number which will be 0 
in PHP. And of course 0 equals 0. There are several points that I just want to 
drop into this mailinglist to discuss about:

1. Why? :)
2. Why is PHP converting the String into a Number instead of converting the 
Number into a String? (If my guess concerning the behaviour is correct)
3. Why is PHP throwing data away which has the developer explicit given to the 
interpreter?
4. Why does var_dump(0 == 'PHP'); has the same result as the snippet above? 
This meens that the equal operator is not explictly implemented in the string 
or integer?
5. Thats a bug I have opend: https://bugs.php.net/bug.php?id=51739 where I also 
had the same problems because 8315e839da08e2a7afe6dd12ec58245d was converted 
into float(INF) by throwing everything starting from da08.. away.

I am using PHP since the year 2000. This means I have 13 years of experience in 
PHP and I really would like you to NOT just answer works as designed. I know 
it works as designed but I want to discuss the design. Also I know that the 
fuzzy behaviour of type conversion is a main feature of PHP. I guess this is 
one point which makes PHP that successfull. But - in my opinion - the described 
behaviour is to fuzzy and just confuses developers.

Best Regards
Daniel Buschke

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



AW: [PHP] PHP is Zero

2013-06-13 Thread BUSCHKE Daniel
Hi,
I used 2 x =. Using 3 x = would not result in that behaviour because string is 
not equal to number. I am fine === here. I explicitly talk about the 2 x = 
variant.

BTW:

# php -r 'var_dump(PHP == 0);'
bool(true)
# php -r 'var_dump(PHP == 1);'
bool(false)

regards
Daniel

-Ursprüngliche Nachricht-
Von: georg [mailto:georg.chamb...@telia.com] 
Gesendet: Donnerstag, 13. Juni 2013 10:35
An: BUSCHKE Daniel
Cc: php-general@lists.php.net
Betreff: Re: [PHP] PHP is Zero

Sorry missed to post list as well

 Hi Daniel,
 here is wild goose

 i assume you have 3 x =
 in your problem formulation
 which could possibly result in the akward standard C mixup; the 
 rightmost = first parsed and resulting in an ASSIGMENT to the variable 
 with that value, the comes the parsing of == which is the equivalence 
 test, and see; the variable is the same since it was just assigned 
 that value; if this theory is correct you would get TRUE regardless 
 what number is following :) /g

 - Original Message -
 From: BUSCHKE Daniel daniel.busc...@nextiraone.eu
 To: php-general@lists.php.net
 Sent: Thursday, June 13, 2013 9:59 AM
 Subject: [PHP] PHP is Zero


 Hi all,
 I want to start a discussion about a PHP behaviour that drives me 
 crazy for years. For the beginning I would like you to guess what the 
 result of the following snippet will be:

 var_dump('PHP' == 0);

 I know the difference of == and === but the result was unexcpected 
 for me. And I hope it is also for you. The result is simply true. 
 Why is it true? I guess this happens because of the conversion from 
 'PHP' to a number which will be 0 in PHP. And of course 0 equals 0. 
 There are several points that I just want to drop into this 
 mailinglist to discuss
 about:

 1. Why? :)
 2. Why is PHP converting the String into a Number instead of 
 converting the Number into a String? (If my guess concerning the 
 behaviour is
 correct)
 3. Why is PHP throwing data away which has the developer explicit 
 given to the interpreter?
 4. Why does var_dump(0 == 'PHP'); has the same result as the snippet 
 above? This meens that the equal operator is not explictly 
 implemented in the string or integer?
 5. Thats a bug I have opend: https://bugs.php.net/bug.php?id=51739 
 where I also had the same problems because 8315e839da08e2a7afe6dd12ec58245d
 was converted into float(INF) by throwing everything starting from 
 da08.. away.

 I am using PHP since the year 2000. This means I have 13 years of 
 experience in PHP and I really would like you to NOT just answer 
 works as designed. I know it works as designed but I want to 
 discuss the design. Also I know that the fuzzy behaviour of type 
 conversion is a main feature of PHP. I guess this is one point which 
 makes PHP that successfull. But - in my opinion - the described 
 behaviour is to fuzzy and just confuses developers.

 Best Regards
 Daniel Buschke

 --
 PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: 
 http://www.php.net/unsub.php

 


--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



AW: [PHP] PHP is Zero

2013-06-13 Thread BUSCHKE Daniel
Hi,
thanks for your answer. Especially the answer 42 made me laughing :)

My Why questions should be understand as Why must it be like that questions.

 On 13/06/13 08:59, BUSCHKE Daniel wrote:
 5. Thats a bug I have opend: https://bugs.php.net/bug.php?id=51739 where I 
 also had the same problems because 8315e839da08e2a7afe6dd12ec58245d was 
 converted into float(INF) by throwing everything starting from da08.. away.

 That's a very different proposition, and probably has more to do with word 
 size: float is 32-bit, so only the first 32 bits are used and if anything 
 else is found the conversion falls back to INF. To handle really big integers 
 like 8315e839da08e2a7afe6dd12ec58245d you probably need a more specialist 
 library (or language)

For me it is not. PHP throws things away during conversion. In my opinion a 
language (compiler, interpreter whatever) should not do that. Never ever! 
Either it is able to convert the value or it is not.

What about of returning null instead of 0 if the conversion is not perfect? 
So intval('F') could return NULL and intval('0') could return 0.

Regards
Daniel

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



AW: AW: [PHP] PHP is Zero

2013-06-13 Thread BUSCHKE Daniel
Hi,

 It gives up when it finds a non-numeric character (as the documentation would 
 tell you)

Why is PHP doing that? I know it works as designed and I know it is documented 
like this but that does not mean that it is a good feature, does it? So lets 
talk about the question: Is that behaviour awaited by PHP software developers? 
Is that really the way PHP should work here? May we should change that?!

BTW: I talked to some collegues and friends since my first post. They all 
guessed that 'PHP' == 0 is false within a few seconds. I think the 
weak-typed-PHP is a little to weak at this point.

Regards
Daniel


-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



AW: AW: [PHP] PHP is Zero

2013-06-13 Thread BUSCHKE Daniel
To be more technical:

If intval('8315e839da08e2a7afe6dd12ec58245d') would return NULL instead of 8315 
then PHP would be still weak-typed and the developer could know that the 
conversion failed. Good idea? Of course NULL should be transparent in 
operations like +. So 0 + NULL should be still 0.

Regards
Daniel

-Ursprüngliche Nachricht-
Von: BUSCHKE Daniel 
Gesendet: Donnerstag, 13. Juni 2013 13:28
An: 'Pete Ford'; php-general@lists.php.net
Betreff: AW: AW: [PHP] PHP is Zero

Hi,

 It gives up when it finds a non-numeric character (as the documentation would 
 tell you)

Why is PHP doing that? I know it works as designed and I know it is documented 
like this but that does not mean that it is a good feature, does it? So lets 
talk about the question: Is that behaviour awaited by PHP software developers? 
Is that really the way PHP should work here? May we should change that?!

BTW: I talked to some collegues and friends since my first post. They all 
guessed that 'PHP' == 0 is false within a few seconds. I think the 
weak-typed-PHP is a little to weak at this point.

Regards
Daniel


--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php