ID: 17732
User updated by: ramses0 at yahoo dot com
Reported By: ramses0 at yahoo dot com
Status: Closed
Bug Type: XMLRPC-EPI related
Operating System: Linux
PHP Version: 4.1.2
New Comment:
Consider the function (please forgive the incorrect math):
function convert( $num ) {
$num = $num + 32;
$num = $num * (5/9);
return( $num );
}
What is expected behaviour of this:
$n = 10;
$z = convert( $n );
print "$n, $z";
...or:
$n = 10;
$z = convert( &$n );
print "$n, $z";
...should they print the same thing? The second is "call time pass by
reference".
And FYI: As I have been told, PHP uses "copy on write, pass by
reference" by default anyway.
So, if you have this example scenario:
$shakespeare = "To be or not to be, etc, etc, etc, etc";
spellcheck( $shakespeare );
...then the function shakespeare only makes a copy of that big long
string if it makes a modification. Example:
function spellcheck( $text ) {
if( strstr( $text, "teh" ) ) { return FALSE; }
return TRUE;
}
...this function should not make that huge copy (php is magic). This
one would:
function spellcheck( $text ) {
$text[0] = "!";
if( strstr( $text, "teh" ) ) { return FALSE; }
return TRUE;
}
...because PHP needs to keep track that the string has been modified.
Ask on the mailing lists if you really care (php-user, probably). :^)
Previous Comments:
------------------------------------------------------------------------
[2003-06-25 12:44:55] scott at executebusiness dot com
Can someone suggest why this is deprecated? I haven't found any reason
for allow_call_time_pass_reference deprecation. Far as I can tell using
byref is a good idea in programming to save cpu time when passing large
vars.
------------------------------------------------------------------------
[2002-06-15 22:24:28] [EMAIL PROTECTED]
This bug has been fixed in CVS. You can grab a snapshot of the
CVS version at http://snaps.php.net/. In case this was a documentation
problem, the fix will show up soon at http://www.php.net/manual/.
In case this was a PHP.net website problem, the change will show
up on the PHP.net site and on the mirror sites.
Thank you for the report, and for helping us make PHP better.
------------------------------------------------------------------------
[2002-06-12 17:50:02] ramses0 at yahoo dot com
Using the following demonstration RPC request, the
function xmlrpc_decode_request (apparently) does not
correctly update the passed in parameter $method_name,
as described in the documentation on:
http://xmlrpc-epi.sourceforge.net/main.php?t=php_api
On a hunch, I tried changing the call to:
xmlrpc_decode_request($xml, &$method);
to use call-time pass by reference. It then worked,
but call time pass by reference is depracated:
Warning: Call-time pass-by-reference has been
deprecated - argument passed by value; If you would
like to pass it by reference, modify the declaration of
xmlrpc_decode_request(). If you would like to enable
call-time pass-by-reference, you can set
allow_call_time_pass_reference to true in your INI
file. However, future versions may not support this any
longer.
As an aside- it appears that you cannot "swallow" the warning by doing
an $results = @decode( $a, &$b )...
it stil gives the "warning, depracated" message. So
that is possibly another bug. I have grepped through
the source trees somewhat, but couldn't find much examples
of functions directly affecting their passed in values
(except "sort", which is pretty complicated).
Thanks-
--Robert
(bugreport is mirrored at the sf.net pages, but that
area appears to be mildly unmaintained)
<?php
$request = <<< END
<?xml version="1.0"?>
<methodCall>
<methodName>greeting</methodName>
<params>
<param>
<value><string>Dan</string></value>
</param>
</params>
</methodCall>
END;
// <?
/* ** DEBUGGING INFORMATION ** */
echo "<pre>";
echo "<b>Request:</b><br>";
print_r( $request );
// decode the request
$method_name = '';
$stuff = xmlrpc_decode_request( $request, $method_name );
echo "<b>Results:</b><br>";
print_r( $stuff );
echo "<b>Method:</b><br>";
print_r( $method_name );
echo "</pre>";
?>
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=17732&edit=1