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