Hi, John

Therefore I think it would be easy to explain how a type-hint for scalar
could work.

You can explain it as saying that the following two functions should be end
up in exactly the same result, whatever you're pasting into:

function foo_one(scalar $bar) {}

function foo_two($bar) {
  if (!is_scalar($bar))
    trigger_error("Catchable fatal error: Argument ? passed to ? must be a
scalar, ? given,", E_RECOVERABLE_ERROR);
}

The error-message is just an example - but that would keep the three
type-hint possibilities in one and the same functionality - like just
allowing exactly this type.
You cannot even pass a class that extends* ArrayIterator *into a property
that requires an array. So I think we should also here (at least for
scalar) do a really strict thing.

Bye
Simon

2012/3/1 John Crenshaw <johncrens...@priacta.com>

> > > > From: Richard Lynch [mailto:c...@l-i-e.com]
> > > > On Wed, February 29, 2012 7:16 pm, John Crenshaw wrote:
> > > > > I'm beginning to think that the type hinting question is too
> closely
> > > > > related to the dirty secrets of type juggling to resolve them
> > > > > separately. You may have to either discard consistency, or else fix
> > > > > the problem of silent bizarre conversions at the same time
> ('foo'==0,
> > > > > '123abc'=123). Fixing the conversions is a BC break though.
> > > >
> > > > [short version]
> > > > One man's "fixing" is another man's "feature" :-)
> > > >
> > > > Old hands can now hit delete while I wax philosophical.
> > >
> > > The operative word was "silent". The actual behavior is fine, but the
> > > silence is unexpected. For example, PHP happily accepts substr('foo',
> > > 'bar') with no complaint at all. From a purely philosophical
> perspective I
> > > think almost everyone would expect *at least* a strict notice.
> > >
> > > On a practical level, we have a major barrier and we'll have to decide
> how
> > > to handle it. As I see it we could do one of the following:
> > > 1. Discard consistency (!!)
> > > 2. Try to convince people to make these bizarre conversions not silent
> (BC
> > > break)
> > > 3. Try to find a creative solution to be consistent without changing
> > > anything about the conversion behavior. (I'm not seeing a way to do
> this
> > > one, unless we redefine "consistent".)
> > >
> > > John Crenshaw
> > > Priacta, Inc.
> > >
> > > --
> > > PHP Internals - PHP Runtime Development Mailing List
> > > To unsubscribe, visit: http://www.php.net/unsub.php
> > >
> > >
> >
> > On Thu, Mar 1, 2012 at 9:52 AM, Simon Schick <
> simonsimc...@googlemail.com> wrote:
> > Hi, John
> >
> > Just to add an idea to yours ..
> >
> > Do you think it's a compatibility-break if we'd decide to send a E_NOTICE
> > or E_WARNING if we f.e. try to give a string to a method that just allows
> > integer for this argument?
> > No break at all, just a E_NOTICE or E_WARNING as the script can succeed
> > anyways.
> > Perhaps I missed something, but since 5.3, the new parameter parsing API
> > throws a Warning when types are not strictly honored.
> > This has been a major feature in favor of "cleaner" programming.
> >
> > Try substr('foo', 'bar'), in PHP >= 5.3 and you get a warning and the
> > function returns null.
> >
> > Julien.P
> >
> > Bye
> > Simon
> >
>
> Ah, didn't notice the *new* behavior. That simplifies things substantially.
>
> I also had another realization today, which is that there's already strong
> precedent for treating parameter hints more aggressively than a type cast.
> For example, you can cast between arrays and objects, with no errors, but
> the type hints will still generate errors. I think this settles the
> consistency issue for me.
>
> John Crenshaw
> Priacta, Inc.
>

Reply via email to