|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2002-06-12 17:50 UTC] 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>"; ?> PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Sat Nov 08 15:00:02 2025 UTC |
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). :^)