ID: 38626 Updated by: [EMAIL PROTECTED] Reported By: php at swapo dot de -Status: Open +Status: Wont fix Bug Type: Feature/Change Request Operating System: all PHP Version: 5.1.5 New Comment:
>$extension = @array_pop(explode('.', $filename)); explode(..) is not a variable, hence it can't be passed by reference. Previous Comments: ------------------------------------------------------------------------ [2006-08-28 12:43:48] php at swapo dot de Description: ------------ The behaviour of pass by reference is a little odd. As stated here (http://www.php.net/manual/en/language.references.pass.php) passing by reference works only if you use a variable as a function argument. This is also the case with builtin functions like array_pop but I can think of many situations when it makes sense to use a function's return value as an argument to another function. A common example (perhaps not the best though) is to get a file extension by combining explode and array_pop. This wasn't a problem until PHP 5.1 and I think it shouldn't be now. Reproduce code: --------------- // doesn't work $extension = array_pop(explode('.', $filename)); // works $parts = explode('.', $filename); $extension = array_pop($parts); unset($parts); // surpressing the error message works too $extension = @array_pop(explode('.', $filename)); Expected result: ---------------- All examples should give the same result. Actual result: -------------- The first example results in an error message as the argument for array_pop must be a variable: Strict Standards: Only variables should be passed by reference ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=38626&edit=1