Hi,

after reading this mail: Is it just me or is a userspace implementation
really that trivial?

function ensure($object, $class) {
    if ($object instanceof $class) {
      return $object;
    }
    throw new InvalidArgumentException(sprintf('Object is not of type %s',
$class));
}


And then instead of all a new syntax

$myObject = ensure($another->foobar, MyType::class); // [1]


Did I miss something.

Regards,
Sebastian



[1] There was another RFC that suggested this special property.

2012/8/15 Nikita Popov <nikita....@gmail.com>

> On Wed, Aug 15, 2012 at 8:15 PM, Kris Craig <kris.cr...@gmail.com> wrote:
> > On Wed, Aug 15, 2012 at 4:48 AM, Anthony Ferrara <ircmax...@gmail.com
> >wrote:
> >
> >> Stan,
> >>
> >> On Wed, Aug 15, 2012 at 3:57 AM, Stan Vass <sv_for...@fmethod.com>
> wrote:
> >>
> >> > Hi!
> >> >>
> >> >>  I agree with you. The one case where this syntax may be very useful
> is
> >> if
> >> >>> we want to implement class casting. So introduce a pair of magic
> >> methods
> >> >>>
> >> >>
> >> >> I do not think we want to implement class casting. I'm not sure how
> >> >> class casting even makes sense - if the object is of one class, how
> can
> >> >> you just make it into another class by casting? If you mean "casting"
> >> >> actually returns another object of different class, then just make a
> >> >> method for that that returns that object, I do not see how obscuring
> the
> >> >> purpose of this operation with unobvious syntax would help.
> >> >>
> >> >
> >> > The discussion is starting to drift very far from my original
> proposal.
> >> >
> >> > Instead of trying to guess what I mean, can't people just refer to my
> >> very
> >> > simple definitive proposed behavior?
> >> >
> >>
> >> My point was that what I posted was the only way that I can see for the
> >> original proposal to be useful.
> >>
> >> Anthony
> >>
> >
> > Though I'm clearly in the minority on this, I for one think this proposal
> > does have more merit than is being argued.  There seems to be general
> > agreement all around that this would provide a benefit as it pertains to
> > code readability-- Not just by humans, but theoretically by doc/etc
> parsers
> > as well.
> >
> > This is where we get into arbitrary, subjective territory.  To me, that
> > benefit in and of itself is sufficient to warrant this feature.  To many
> of
> > you, it is not enough.
> >
> > The tie-breaker for me is the fact that, though the benefits are modest,
> > there's really no noticeable cost, either.  The argument seems to,
> > essentially, break down as follows:  "This feature isn't worth our time."
> > .... "Yes, it is!" .... "No, it isn't."
>
> Every feature has a cost, even if that cost is just maintaining the
> code. Doing language changes for minority use cases, which already
> have sensible solutions, doesn't make much sense.
>
> Another aspect here is that there is no reasonable syntax for this
> feature, at least I can't think of one:
>
>  * The syntax `$foo = (InterfaceName) $container->service` is
> completely out of question. It looks like a cast, but wouldn't
> actually do a cast.
>  * Same is to be said about `InterfaceName $foo =
> $container->service`. This syntax implies that the $foo variable will
> always be of type InterfaceName, even if it is later reassigned. It's
> not a sensible syntax for a one time validation
>  * The other three syntaxes that were mentioned were just as unclear.
> E.g. `$foo = $container->service as InterfaceName` again looks like a
> strange cast syntax and `$foo = $container->service is InterfaceName`
> looks like the assignment should evaluate to a boolean (i.e. `is` is
> some kind of `instanceof`).
>
> On the other hand, the current ways of accomplishing the same goal are
> well-established and easy to understand:
>
>  * Using a docblock: /** @var $foo IntefaceName **/
>  * Using an assertion: assert($foo instanceof InterfaceName).
>
> I think that the assertion is a rather concise and clear way to do
> this. It is much more obvious than some new and obscure `$foo =
> (InterfaceName $container->service)` syntax.
>
> Nikita
>
> --
> PHP Internals - PHP Runtime Development Mailing List
> To unsubscribe, visit: http://www.php.net/unsub.php
>
>

Reply via email to