On Tue, Jul 15, 2014 at 2:19 PM, Ferenc Kovacs <tyr...@gmail.com> wrote:
> > > > On Mon, Jul 14, 2014 at 7:19 PM, Kristopher <kristopherwil...@gmail.com> > wrote: > >> On Mon, Jul 14, 2014 at 1:14 PM, Alain Williams <a...@phcomp.co.uk> >> wrote: >> >> > On Mon, Jul 14, 2014 at 06:09:22PM +0100, Andrea Faulds wrote: >> > > >> > > On 14 Jul 2014, at 18:01, Alain Williams <a...@phcomp.co.uk> wrote: >> > > >> > > > But if you have: >> > > > >> > > > function foo(int $a) { >> > > > ... >> > > > $a = 3 / 2; >> > > > } >> > > > >> > > > What do you expect $a to contain ? I would suggest integer 1. >> > > >> > >> I would have expected 1 - since it appears, from the code, that $a should >> > only contain integers. >> >> >> What about the current type hinting we have, then? >> >> function foo(Bar $a) { >> $a = 3 / 2; >> } >> >> Perfectly OK. Why would we treat scalars any different? >> > > this was asked and answered a dozen of times in the past, but let me > repeat once again: > > php does support type juggling/coercion for scalar types, but not for > complex types. > introducing "strict" typehints for complex types was safe, as there are no > expectation from the users, if you expect an instance of Foo and you got a > Bar (which isn't a subclass of Foo) then you know that you screwed up. > (personally I think that the adding the support for array to the strict > typehints was a bad idea, but that is out of scope here.) > But people do have expectations about the scalar types in php, and they > used to not care about the exact types of a variable as long as it can be > coerced into the expected type. > If you think it over, probably 80-90%+ of all incoming data we are working > with coming from a source which delivers everything as a string (anything > coming from HTTP is a string, anything coming from the database which isn't > using a binary protocol arrives as string, anything coming from memcached > is a string, redis: same thing). > But php doesn't care, because one of it's distinguished features is that > it can coerce between scalar types. > If we introduce scalar type hints, people will use it, if they will use > it, people have to be aware that they can't pass numeric looking strings > into functions and expect them to work. > It will blow up with a fat E_RECOVERABLE_ERROR. > But this won't hold back the library authors from using it, which means > that the consumers of those libs has to start coding defensively, and make > sure that the variable holding the value 123 is an integer and not a float > or a string, because that will blow up something. > And we can argue whether or not it is a good thing that php has type > juggling, but we have that, and it is not likely to be changed(biggest BC > break ever), so introducing something which completelly negates that won't > likely to get support from the devs. > > -- > Ferenc Kovács > @Tyr43l - http://tyrael.hu > sorry, not neccessary the best place for my reply, I just had to type that out seeing the dozens of mails from the last couple of days. -- Ferenc Kovács @Tyr43l - http://tyrael.hu