Doc #80230 [Com]: Doc for exec specifies & (reference) param, fails

From: Date: Tue, 13 Oct 2020 20:04:52 +0000
Subject: Doc #80230 [Com]: Doc for exec specifies & (reference) param, fails
References: 1  Groups: php.doc.bugs 
Request: Send a blank email to doc-bugs+get-17994@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=80230&edit=1

 ID:                 80230
 Comment by:         rowan dot collins at gmail dot com
 Reported by:        per at perit dot se
 Summary:            Doc for exec specifies & (reference) param, fails
 Status:             Open
 Type:               Documentation Problem
 Package:            Documentation problem
 Operating System:   Linux
 PHP Version:        Irrelevant
 Block user comment: N
 Private report:     N

 New Comment:

The documentation is showing you the *signature* of the function, not the *usage*. An actual
declaration in userland would in fact look something like this:

function exec (string $command, ?array &$output=null, ?int &$return_var=null): string { ....
}

The manual page could do with an example of using those params though, which would look something
like this:

$output=null;
$retval=null;
exec('whoami', $output, $retval);
echo "Returned with status $retval and output $output";


Previous Comments:
------------------------------------------------------------------------
[2020-10-13 19:45:20] per at perit dot se

Description:
------------
---
From manual page: https://php.net/function.exec
---
The documentation specifies syntax
exec ( string $command [, array &$output [, int &$return_var ]] ) : string

This syntax breaks PHP, and according to numerous internet articles like https://stackoverflow.com/questions/8971261/php-5-4-call-time-pass-by-reference-easy-fix-available
explaining it has been so a while:
> As of PHP 5.3.0, you will get a warning saying that "call-time pass-by-reference" is
> deprecated when you use & in foo(&$a);.

Please update the documentation with correct syntax, and if/when it differs for specific versions,
please note the version and change in question - now it incorrectly claims to be valid for
"(PHP 4, PHP 5, PHP 7)"



Test script:
---------------
$ cat > test-ref-arg.php
<?php
  exec ( "pwd", &$output );  
  echo "Got output: ";
  var_dump($output);

$ php test-ref-arg.php
PHP Fatal error:  Call-time pass-by-reference has been removed in /home/xx/IMPORT/test-ref-arg on
line 2

/opt/rh/rh-php73/root/bin/php test-ref-arg.php
PHP Parse error:  syntax error, unexpected '&', expecting ')' in
/home/xx/test-ref-arg.php on line 2




------------------------------------------------------------------------



--
Edit this bug report at https://bugs.php.net/bug.php?id=80230&edit=1


Thread (5 messages)

« previous php.doc.bugs (#17994) next »