On Mon, Jul 12, 2021, at 9:26 AM, Levi Morrison via internals wrote:

> > What are the use cases for integrated object to object (ie, class to class) 
> > conversion in PHP?  Rust's type system is a very different beast, so its 
> > casting logic makes more sense there.  I'm not entirely clear on what the 
> > use case is in PHP.  When would that be superior to "just write an asFoo() 
> > method and move on with life"?
> >
> > Scalar conversion I can see, but every time someone suggests adding 
> > siblings to __toString(), there's major pushback.
> >
> > --Larry Garfield
> >
> > --
> > PHP Internals - PHP Runtime Development Mailing List
> > To unsubscribe, visit: https://www.php.net/unsub.php
> >
> 
> The features I was referring to are not casting; casting does exist in
> Rust but this is not it. Rather, it's a generic way to convert
> objects. It's nice to have a standard way to do it, instead of every
> project doing something bespoke. It also can enable some use cases
> that aren't relevant in PHP (yet) such as taking any generic type
> which can be converted into a T, because you only want to do that
> transformation conditionally on something else.

So, like David suggested, some standardized version of $foo->as($type), which 
then returns an instance of $type?

I... don't think I've ever done that often enough to justify a standard feature 
for it.  When have you run into it?

That also seems quite different from what Max is talking about:

On Mon, Jul 12, 2021, at 9:54 AM, Max Semenik wrote:

> I was thinking of something akin to many compiled languages' approach of
> "consider this expression is now of that type, and throw an exception if
> it's not". An example of this approach from Benjamin's proposal of old^
> 
> $service = (EmailService) $diContainer->get('email.service');
> 
> Instead of
> 
> /** @var EmailService $service */
> $service = $diContainer->get('email.service');
> if (!$service instanceof EmailService) {
>     throw new TypeError('Expected instance of EmailService, ...');
> }

Hm, that's a different creature.  I... would be probably OK with something in 
that direction, though I wouldn't work on it myself.  I think what you're 
describing here is more of a type assertion.  "Assert that this variable is of 
type X, otherwise bail."  So, some kind of non-disableable (or maybe 
disableable?) shorthand for `assert($foo instanceof Bar)`.

--Larry Garfield

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

Reply via email to