> -----Ursprüngliche Nachricht-----
> Von: Zeev Suraski [mailto:z...@zend.com]
> Gesendet: Mittwoch, 18. Februar 2015 08:00
> An: Nikita Popov; Rasmus Lerdorf
> Cc: Sara Golemon; PHP internals
> Betreff: RE: [PHP-DEV] Scalar Type Hints v0.4
> 
> > -----Original Message-----
> > From: Nikita Popov [mailto:nikita....@gmail.com]
> > Sent: Wednesday, February 18, 2015 3:06 AM
> > To: Rasmus Lerdorf
> > Cc: Sara Golemon; PHP internals
> > Subject: Re: [PHP-DEV] Scalar Type Hints v0.4
> >
> > The inability to implicitly cast "123" to int is pretty much the KEY
> > distinction between weak and strict scalar typehints (those pesky
> > value-dependent type checks). If the strict typing mode doesn't offer
> > this, what's the point at all?
> 
> I am wondering what the point is indeed with preventing "123" to 123.  So 
> far, all the concrete use cases people brought up
> had to do with "Apple" or
> "100 dogs", but nobody ever seems to be able to explain why converting "123"
> to 123 is likely to be a problem real world.  Is it really just static 
> analyzers?
> 

Strict mode is useful in the sense that it prevents unnecessary implicit 
conversions (which are costly) and it improves readability. 
Following an example:

function foo(string $x, int $y){
  bar(1); 
  return strstr($x,"hello", $y);
}

function bar(float $a){}

After adding the implicit conversions the code would look as follows:

function foo(string $x, int $y){
  bar((float) 1);
  return strstr($x, "hello", (bool) $y);
}

function bar(float $a){}

In strict mode the original code would not be valid (rightly so IMO). Just from 
reading the original code I would suspect that strstr expects some kind of an 
offset (hence the int), therefore strict mode probably revealed a bug. 
And if not, then one can add the conversion manually. However, this is not as 
trivial as it sounds. Personally I think it would only make sense to have 
strict mode in PHP if the user had more strict conversion functions at hand. 
What is the benefit of the following? if the conversion to int is as sloppy as 
today then one does not gain anything from the strict mode IMO:

function foo(int $x){}
foo( (int)$_GET["bla"]);


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

Reply via email to