> -----Ursprüngliche Nachricht-----
> Von: Dmitry Stogov [mailto:dmi...@zend.com]
> Gesendet: Montag, 2. Februar 2015 20:14
> An: Robert Stoll
> Cc: PHP Internals; Andrea Faulds; Nikita Popov
> Betreff: Re: [PHP-DEV] What do we need strict scalar type hints for?
> 
> On Mon, Feb 2, 2015 at 9:41 PM, Robert Stoll <p...@tutteli.ch> wrote:
> 
> > Hi Dimitry,
> >
> > > -----Ursprüngliche Nachricht-----
> > > Von: Dmitry Stogov [mailto:dmi...@zend.com]
> > > Gesendet: Montag, 2. Februar 2015 10:13
> > > An: PHP Internals; Andrea Faulds; Nikita Popov
> > > Betreff: [PHP-DEV] What do we need strict scalar type hints for?
> > >
> > > hi,
> > >
> > > could you please write down few use cases, when strict scalar type
> > > hints
> > are really useful.
> > >
> > > Thanks. Dmitry.
> >
> > I think strict types are beneficial in all those places where you
> > would put manual tests to ensure that the passed value is of a certain
> > type and only of this type - removing the hassle (ok, I did not add
> > anything to the discussion so far ^^). Right now, I mainly think of
> > functions which expect an int - especially in the domain of time and
> > money.  I would expect an int and I would not want that a float can be
> > passed without warning and get silently converted to an int (loosing
> > precision in the domain of time or money can be crucial).
> >
> However, IMO it is not necessary to have a strict mode as presented by
> > Andrea -- I think it would be good enough if we use the same widening
> > rules as in Java, C# etc. and be strict otherwise. I am aware of that
> > with the support of BigInteger we would have a widening problem
> > (BigInteger to
> > float) but could be solved by a BigDecimal as in Clojure.
> >
> > Ah... I now something I would definitely want to be strict. I guess a
> > typical bug, which is made by many beginners, is using the result of
> > strpos in an if statement without using the identity operator -- btw.
> > would the strict mode affect operators and control structures as well?
> 
> 
> no. now we speak only about parameter and return value type hints.

[Robert Stoll] 
Could be addressed in another RFC then.

> 
> 
> > Would somehow be the logical consequence but I suppose the impact on
> > performance would be too big. Or wouldn't it?
> >
> 
> it wouldn't reduce performance. may be even increase, but it'll break every 
> second app.
>

[Robert Stoll] 
I wrote it a little bit ambiguously, I actually meant a negative big impact on 
performance. Concerning the second part of your sentence. As other already 
mentioned, it would not break every second app since only those apps would be 
concerned which enable the strict mode and even then only those files are 
concerned which are written by the owner of the code and the owner oneself 
decided to use the strict mode, ergo => everything is fine as long as the owner 
writes strict code and if she/he does not, then it actually must break since 
the owner of the file made a mistake in terms of strictness and wished to be 
informed about it. Makes sense no?
 
> 
> > Back to the topic, if I expect a bool as parameter I would definitely
> > not want it to be automatically converted since this is a sink for bugs.
> >
> 
> I'm not sure. If we would work on a type-safe language I would definitely 
> agree, but PHP is a "loosely typed language" by
> definition.
> 

[Robert Stoll] 
I agree, PHP is weakly typed and that is fine. Yet, if we are discussing what 
strict types would be useful for then the mentioned examples are good use cases 
IMO. 
Personally, I think weak type hints as suggested in the RFC might be a way to 
go for PHP [*] where in a type-safe version of PHP (such as TSPHP [1]) it would 
not make sense at all.

[*] even though I think it is really ugly that a float or a float in a string 
can be passed to a function expecting an int. IMO only those values should 
automatically converted where it can be guaranteed that no precision is lost. 
Maybe I have not read the RFC carefully enough - following some examples to 
illustrate what I mean:

function foo(int $i){}
foo(1);       //ok
foo(2.0);   //still fine
foo("2");   //acceptable as well
foo('3.0'); //even this is ok

foo(1.4);       //ouch
foo("1.2");   //please no
foo("1lxs");  //oh no.. please... noooo ^^

Well, yeah... I guess you get my point.


[1] http://tsphp.ch

> Thanks. Dmitry.
> 
> 
> >
> > Hope that helps.
> >
> > Cheers,
> > Robert
> >
> >
> >
> >
> >
> > --
> > PHP Internals - PHP Runtime Development Mailing List To unsubscribe,
> > visit: http://www.php.net/unsub.php
> >
> >


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

Reply via email to