Re: Scalar type hinting
| From: | Simon Schick | Date: | Wed, 29 Feb 2012 10:26:24 +0000 |
| Subject: | Re: Scalar type hinting | ||
| References: | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-58333@lists.php.net to get a copy of this message | ||
Hi, Arvids
I did not meant to putt all in one big RFC but more to think about the
connection between these two while developing.
Bye
Simon
2012/2/29 Arvids Godjuks <arvids.godjuks@gmail.com>
> Combining different things into one big RFC is not a good idea. It's
> hard to develop and test the work it it's in one big chunk.
> Decomposition makes it much easier. Type hinting has to have it's own
> RFC.
> Besides - someone can be willing to do type hinting patch and don't
> want to do the object_cast_magic one.
>
> And thanks for the support :)
>
> 2012/2/29 Simon Schick <simonsimcity@googlemail.com>:
> > Hi,
> >
> > We could even combine this with the following RFC:
> > https://wiki.php.net/rfc/object_cast_magic
> >
> > If an integer is required and you pass an object, it first checks if this
> > object is castable to integer ;)
> >
> > Bye
> > Simon
> >
> > 2012/2/29 Simon Schick <simonsimcity@googlemail.com>
> >
> >> Hi, John
> >>
> >> I personally do not care about weak or strong variables at all ... I
> only
> >> want what Arvids suggested last time:
> >>
> >>
> >> > test(1, 2); // 2;
> >> > test("1", 2); // 2
> >> > test("1aaa", 2); // E_NOTICE or E_TYPE and result 2
> >> > test(array(2), 2); // E_RECOVERABLE_ERROR - just like with array type
> >> hint now.
> >> >
> >> > It's really what the most people want. Simple, easy to pick up (object
> >> > and array already have this) and is just optional.
> >>
> >> I count myself as a part of *most people* in this statement ;)
> >> I'm also quite fine with the current type-hints as you'd anyways get an
> >> error if you try something like this:
> >>
> >> function foo(SimpleClass $a) {
> >> $a->getName();
> >> }
> >>
> >> foo("Test");
> >>
> >> If you now get *method called from an non-object* or a message that you
> >> have passed a value that's not compatible with *SimpleClass* ...
> >>
> >> I'd like to split this discussion in parts:
> >>
> >> - just type-hint in functions (as we have it with classes and arrays)
> >> or bind a variable to a strict type?
> >> - should it then also be possible bind variables to a specific
> >> class or interface?
> >> - should we go for weak or strong types?
> >> - the type-hint is also weak in one way because it accepts all
> >> that's compatible with the given type.
> >>
> >> Bye
> >> Simon
> >>
> >>
> >> 2012/2/29 John Crenshaw <johncrenshaw@priacta.com>
> >>
> >>> I would personally be inclined towards something simpler like E_NOTICE
> or
> >>> E_WARNING, but current type hints all raise E_RECOVERABLE_ERROR. I
> think we
> >>> should be consistent, and the consistency argument may make the
> difference.
> >>>
> >>> There may be a strong case for changing the error level on all type
> hints
> >>> to something simpler (or new, like E_TYPE), but I think that might be
> >>> better to tackle that in a separate discussion.
> >>>
> >>> John Crenshaw
> >>> Priacta, Inc.
> >>>
> >>> From: Kris Craig [mailto:kris.craig@gmail.com]
> >>> Sent: Tuesday, February 28, 2012 8:40 PM
> >>> To: John Crenshaw
> >>> Cc: Rick WIdmer; internals@lists.php.net
> >>> Subject: Re: [PHP-DEV] Scalar type hinting
> >>>
> >>> I wouldn't mind that, though I'm concerned that it may not be sellable
> >>> because some people on here have expressed a strong opinion that this
> >>> shouldn't throw anything more than a notice or a warning at most,
> something
> >>> that I and others strongly disagree with. The logical approach, to me
> at
> >>> least, is to follow the example of include() and require(); i.e.
> they're
> >>> both identical except that one throws a scary error while the other
> one is
> >>> just a warning.
> >>>
> >>> I'm fine with just throwing E_RECOVERABLE_ERROR, though I fear that may
> >>> alienate too many people for us to be able to get this through. Though
> >>> it's possible I might be overestimating that factor.
> >>>
> >>> --Kris
> >>>
> >>> On Tue, Feb 28, 2012 at 5:17 PM, John Crenshaw <
> johncrenshaw@priacta.com
> >>> <mailto:johncrenshaw@priacta.com>> wrote:
> >>> > On Tue, Feb 28, 2012 at 3:03 PM, Rick WIdmer <
> vchkpw@developersdesk.com
> >>> <mailto:vchkpw@developersdesk.com>>wrote:
> >>> >
> >>> > > On 2/28/2012 2:58 PM, Kris Craig wrote:
> >>> > >
> >>> > > strong int $a = "1"; // Converts to 1. May or may not throw
> >>> > > an
> error
> >>> > > (I'm
> >>> > >> still on the fence).
> >>> > >>
> >>> > >
> >>> > > It this is an error, it is no longer PHP.
> >>> > >
> >>> >
> >>> > @Rick Though I'm not sure I'd agree with the overly broad "it
> >>> > is no
> >>> longer PHP" hyperbole, I think the basic point that it would be a
> >>> significant departure from the current model has merit. So ok, you've
> >>> convinced me.
> >>> That example should not throw any errors. I'm officially no longer on
> >>> the fence with that. =)
> >>> >
> >>> > --Kris
> >>> OK, if we're all on the same page there, I think this means that there
> is
> >>> no significant difference between the "strong int" and "weak
> >>> int" in
> your
> >>> proposal (the only remaining difference being the level of error raised
> >>> when it cannot be converted, which IMO is not substantial enough to
> deserve
> >>> a keyword.) I'd prefer to just pick one error level to use
> >>> (E_RECOVERABLE_ERROR would be the most consistent) and keep everything
> >>> simple.
> >>>
> >>> John Crenshaw
> >>> Priacta, Inc.
> >>>
> >>>
> >>
>