Doc #80230 [Ver->Csd]: Doc for exec specifies & (reference) param, fails

From: Date: Wed, 09 Dec 2020 15:48:10 +0000
Subject: Doc #80230 [Ver->Csd]: Doc for exec specifies & (reference) param, fails
References: 1  Groups: php.doc.bugs 
Request: Send a blank email to doc-bugs+get-18227@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
 Updated by:         phpdocbot@php.net
 Reported by:        per at perit dot se
 Summary:            Doc for exec specifies & (reference) param, fails
-Status:             Verified
+Status:             Closed
 Type:               Documentation Problem
 Package:            Documentation problem
 Operating System:   Linux
 PHP Version:        Irrelevant
 Block user comment: N
 Private report:     N

 New Comment:

Automatic comment on behalf of cmb
Revision: http://git.php.net/?p=doc/en.git;a=commit;h=d54819610d84aa50a3223b99c9946d58cc489b3a
Log: Fix #80230: Doc for exec specifies & (reference) param, fails


Previous Comments:
------------------------------------------------------------------------
[2020-12-09 15:46:51] cmb@php.net

Automatic comment from SVN on behalf of cmb
Revision: http://svn.php.net/viewvc/?view=revision&revision=351975
Log: Fix #80230: Doc for exec specifies & (reference) param, fails

------------------------------------------------------------------------
[2020-10-13 20:28:42] cmb@php.net

What Rowan said.  And yes, there should be an example.

Note that there is also an appendix on "How to read a function
definition (prototype)"[1]

> "(PHP 4, PHP 5, PHP 7)"

That just means that function is available for PHP 4, 5 and 7; it
does not imply that it worked exactly the same in older versions.
In fact, the manual currently is supposed to document only PHP 7
(there is few info about PHP 8, and still some info about PHP 5,
though).

[1] <https://www.php.net/manual/en/about.prototypes.php>

------------------------------------------------------------------------
[2020-10-13 20:04:52] rowan dot collins at gmail dot com

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";

------------------------------------------------------------------------
[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 (#18227) next »