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

From: Date: Thu, 28 Dec 2017 17:25:48 +0000
Subject: Bug #53731 [Opn->Csd]: 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-213310@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: Closed Type: Bug Package: Scripting Engine problem Operating System: Windows 7 x64 PHP Version: Irrelevant -Assigned To: +Assigned To: nikic Block user comment: N Private report: N New Comment: As per previous comment, no longer relevant in PHP 7. Previous Comments: ------------------------------------------------------------------------ [2015-08-28 13:49:58] nikic@php.net @requinix: Thanks, I didn't get that this is about type hints. In that case, I guess this is fixed in PHP 7 by means of it throwing an exception? It doesn't seem like doing this kind of modification through a direct call to debug_backtrace() is possible: https://3v4l.org/MWE8l ------------------------------------------------------------------------ [2015-08-28 13:34:39] requinix@php.net I think I have what @blue-tidus159 was trying to show. The key is that the function parameter has a type hint and the value passed is not an instance of it (thus triggering the error). But it gets a lot more interesting after that... https://3v4l.org/7B3jB Then the comment later seems to be about how it also happens with by-ref parameters. https://3v4l.org/Vs8lG On a lighter note, I have been inspired to create this abomination: https://3v4l.org/5lbf0 ------------------------------------------------------------------------ [2015-08-28 11:43:07] nikic@php.net 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. ------------------------------------------------------------------------ [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'); ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at https://bugs.php.net/bug.php?id=53731 -- Edit this bug report at https://bugs.php.net/bug.php?id=53731&edit=1

« previous php.bugs (#213310) next »