Hi Levi,

Am 25.03.2020 um 21:44 schrieb Levi Morrison:
To me, this is almost a good idea. However, I would want regular type
checking, not casts. Importantly, regular type checks would fit well
on allowing array destructuring directly in function signatures, which
would basically be a form of named parameters.


How exactly do you imagine array destructuring in function signatures
with type checks? Something like:

function test(['parameter1' => int $parameter1, 'parameter2' => string
$parameter2) {
    // ... do something with $parameter1 and $parameter2
}

Calling the function then may look like:

test(['parameter1' => 100, 'parameter2' => 'Hello World']);

I guess the type check then depends on the strict_types direcitve
whether a call like:

test(['parameter1' => 100, 'parameter2' => 100]);

would trigger a TypeError or be valid and cast the value for $parameter2
to a string just like a casual function signature with a string parameter.


The same behaviour would be applied to array destructuring outside of
function signatures. Assumed we gather data from a CSV file:

1,Test,2002
2,Example,2010
3,Demo,2016

And we want to process the data with array destructuring like:

$handle = fopen('test.csv', 'r');
while (($data = fgetcsv($handle)) !== false) {
    [int $id, string $data, int $year] = $data;
    // do something with the correctly typed variables
}

The code would trigger a fatal error when strict_types are enabled. With
strict_types disabled it would behave identically as the currently
proposed casts. I wouldn't want the example above to trigger a TypeError
even when strict_types are enabled. As a form of named parameters
regular type checks should definitely preferred over a cast but for the
current usage of array destructuring I think regular type checks cover
different use cases (which may also exist) than my proposal.

Enno

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

Reply via email to