> On Oct 21, 2019, at 11:12 AM, Rowan Tommins <rowan.coll...@gmail.com> wrote:
>> What if in the future PHP implements variadic syntax for assigning to
>> arrays, e.g. $var = 1,2,3 where $var could satisfy a $variadic parameter
>> set of parameters w/o requiring `...`?   If PHP embraces that — note GoLang
>> has something similar — then will comma syntax allow for it with hacky use
>> of parentheses?
>> $y =  switch ($x) {
>>   case 1  => $var = 1,2,3, $var[1],
>>   case -1  => $var = 9,8,7, $var[1],
>>   default => null,
>> };
> 
> I'm not really clear what feature you're suggesting here, but I'm pretty
> sure it conflicts with existing uses of commas, so shouldn't constrain us
> from using them elsewhere.
> 
> foo(1,2,3);
> foo($var = 1,2,3);
> $a = [0, $var = 1,2,3];
> // etc

You may well be right. 

But to follow up to clarify what I was thinking consider the following 
(hypothetical) PHP syntax. Note that the return value has two comma separated 
values, and the assignment can accept those multiple values into two comma 
separated variables in the assignment:

function read_file(string $filepath):string,PHP\Error {
   $content = file_get_contents( $filepath );
   $error = false === $content
      ? new PHP\Error( "failed to open '%s'", $filepath )
      : null;
   return $content, $error;
}

$content, $err = read_file( __DIR__ . '/myfile.txt' );
if (!is_null( $err ) ) {
   error_log($err->message);
}
Now yes I know we can do this with arrays and list(), but I have never seen 
anyone do this in the wild and hence I think it is not idiomatic PHP. And I 
hypothesize they do not do this because it is ugly to read and write and 
because PHP will throw a runtime error (vs. load-time error) if you have fewer 
values returned than you assign:
function read_file( string $filepath ): array {
   $content = file_get_contents( $filepath );
   $error = false === $content
      ? new My\Error( "failed to open '%s'", $filepath )
      : null;

   return array( $content, $error );
}

list( $content, $err ) = read_file( __DIR__ . '/myfile.txt' );
if ( ! is_null( $err ) ) {
   error_log( $err->message );
}
With the first example PHP could type check at load time vs. having to wait for 
coverage of this code at runtime, and `:array` type hint in the latter is not 
as good as the `:string, PHP\Error` type hint of the former.

I am probably having unreasonable expectations to believe we will ever see this 
type of thing in PHP. Still I hold out hold and want to register an objection 
if I see new syntax that would make this syntax impossible in the future. #fwiw

-Mike

Reply via email to