On Mon, Feb 26, 2024, at 7:39 PM, Rowan Tommins [IMSoP] wrote:
> On 26/02/2024 19:02, Frederik Bosch wrote:
>>
>> That's how it always has been, no? So in your example, short code
>> abbreviated form would not work. One has to write a block.
>>
>> public string$fullName {
>> set=> [$this->first, $this->last] = explode
>> <http://www.php.net/explode>(' ', \ucfirst
>> <http://www.php.net/ucfirst>($value)); // error, $fullName is a string,
>> returning array
>> }
>>
>> public string$fullName {
>> set{
>> [$this->first, $this->last] = explode
>> <http://www.php.net/explode>(' ', \ucfirst
>> <http://www.php.net/ucfirst>($value)); // no error, not returning
>> }
>> }
>
>
> I think the intention is that both the block and the arrow syntax would
> have any return value ignored, as happens with constructors, for
> example. Note that in PHP, there is actually no such thing as "a
> function not returning a value", even a "void" function actually returns
> null; so if the return value was treated as meaningful, your second
> example would give an error "cannot assign null to property of type string".
This correct. Given a function test():
$ret = test('Larry Garfield');
There's no way to tell if $ret is a possibly-null value we should do something
with, or null by side-effect. The RFC right now takes the stance of "it's null
by side effect, always, so we never do anything with the return so it's
consistent."
> However, as noted in a previous message, I agree that the short form
> meaning "the value returned is saved to the backing field" is both more
> expected and more useful.
You're the first person to comment on it, but I'm glad you agree. :-) I like
it, but Ilija is still unsure about it.
> The "yield" idea is ... interesting. I think personally I find it a bit
> too magic, and too cryptic to be more readable than an explicit
> assignment. Opinions may vary, though.
>
> Regards,
Mixing in syntax only used for generators here seems like it's asking for
trouble. It wouldn't actually be a coroutine, so using coroutine like syntax
would just be confusing. It's confusing to me whether this implies the hook
becomes a generator or not, which means it's likely to confuse a lot of other
people.
--Larry Garfield