On May 26, 2010, at 5:20 PM, Zeev Suraski wrote: > At 23:44 26/05/2010, Davey Shafik wrote: > >> On May 26, 2010, at 3:08 PM, Zeev Suraski wrote: >> >> > At 21:12 26/05/2010, Pierre Joye wrote: >> >> As PHP's type system is seen as a big plus, >> >> I have to say that many users consider it as a plus in the >> >> implementation of a given method function or method. But the same >> >> users ask to have something more strict for the methods signature. I >> >> think it is a valid request and somehow makes sense too. >> > >> > I think that the proposed auto-converting type hints answer this request >> > quite well... >> > >> > Zeev >> >> Do you propose to have a warning when the types are a mis-match, similar to >> the >> array->scalar conversion example from Gustavo? (strtoupper(array('ABC'))) >> >> If you have a warning or notice, that warns of potential loss of data >> accuracy, then >> I think I'd be OK with auto-converting. > > Yep - that's exactly the idea. > >> Having said that, all other type hints are strict, throwing a catchable >> fatal error — consistency >> for what is essentially the same syntax, is more important IMO. > > In my opinion it's really a matter of whether the value makes sense in its > context or not. Much like a function that requires an object of type X will > accept an object of type Y if Y extends from X - because Y is a kind of X, > "42" is a kind of an int. It's true that no conversion is made in the former > case, but still - across 99.9% of PHP, "42", 42 and 42.0 are the same thing. > >> Would it be possible to support two syntaxes: >> >> function foo( (int) $bar) { } // auto-cast to int >> function foo(int $bar) { } // require int > > I would advise against it - IMHO having both strict and auto-converting type > hints means having all of the issues of strict typing, and making that worse > by having similar confusing syntaxes on top of it... In general I think > there should be an exceptionally good reason to add core language syntax. > Auto-converting type hints would cater for the vast majority of real world > use cases. While I'm sure we can come up with situations where you'd want a > strict type check, for those few cases - you could simply use is_int() - no > need to add a language-level support for it. > > Zeev
You could just as easily say to do: function foo($bar) { $bar = (int) $bar; } as: function foo($bar) { if (!is_int($bar)) { // error } } Why bother with either if that's the case? Why not add support for something like: function foo($bar) { (int) &$bar; } to allow for in-place casting (instead of temp-var+assign) and make it a shortcut. I'm sorry, but your reasoning is silly IMO. Type checking or casting are both currently easy enough to do; the only value in the auto-casting is to inform the user of loss of precision when they write against it. Does that really need language-level support? It could just as easily be part of the docblock. - Davey -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php