Bug #53731 [Opn->Fbk]: Function arguments can only be changed when native values are given.

From: Date: Fri, 28 Aug 2015 11:43:08 +0000
Subject: Bug #53731 [Opn->Fbk]: Function arguments can only be changed when native values are given.
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-195589@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=53731&edit=1 ID: 53731 Updated by: nikic@php.net Reported by: blue-tidus159 at hotmail dot com Summary: Function arguments can only be changed when native values are given. -Status: Open +Status: Feedback Type: Bug Package: Scripting Engine problem Operating System: Windows 7 x64 PHP Version: Irrelevant Block user comment: N Private report: N New Comment: I can't reproduce this. https://3v4l.org/QI9H8 shows that across all PHP versions it's not possible to modify the argument via debug_backtrace(). That's the correct behavior -- you aren't supposed to be able to do a modification through that. If you are able to do changes, that would be a bug. Previous Comments: ------------------------------------------------------------------------ [2011-01-13 21:41:51] blue-tidus159 at hotmail dot com I just realized that a similar effect can be reached by setting the reference mark before the parameter name. The problem is just that the original object will be changed too. function a(&$a){ var_dump($a); } $test = new A(); var_dump($test); // object A a($test) // int 1 var_dump($test); // int 1 => this should still be object A, you should create internally a new reference parameter variable referencing the passed object if you know what i mean. I know that native values get copied and that there is no problem with overwriting the value. But objects could be handled like this: if used as parameter value, create a new reference variable referencing the object, this variable can then be overwritten without changing the original object. ------------------------------------------------------------------------ [2011-01-12 22:09:04] blue-tidus159 at hotmail dot com Little typo, i meant: set_error_handler('errorHandler'); ------------------------------------------------------------------------ [2011-01-12 22:07:57] blue-tidus159 at hotmail dot com Description: ------------ The problem with debug_backtrace() is, that only function parameter values which are native types can be changed, but not if the value is an object. Test script: --------------- <?php function errorHandler($level, $msg){ $debug = debug_backtrace(); $debug[1]['args'][0]='1'; return true; } set_error_handler('error'); function a($a){ // E_RECOVERABLE_ERROR var_dump($a); } class A{} a(1); a(2); a(new A()); ?> Expected result: ---------------- int 1 int 1 int 1 Actual result: -------------- int 1 int 1 object A ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=53731&edit=1

« previous php.bugs (#195589) next »