[PHP] Assignment in Conditional - How are they evaluated?
How is the following evaluated: [code] if ($data = somefunc()) ... [/code] Ignoring the 'assignment inside condition' arguments, is the return value of somefunc() assigned to $data, and then $data's value is evaluated (to true or false), or is the actual assignment tested (does the assignment fail, etc)? -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP] Assignment in Conditional - How are they evaluated?
On Thu, 2009-10-29 at 13:58 +, Mark Skilbeck wrote: How is the following evaluated: [code] if ($data = somefunc()) ... [/code] Ignoring the 'assignment inside condition' arguments, is the return value of somefunc() assigned to $data, and then $data's value is evaluated (to true or false), or is the actual assignment tested (does the assignment fail, etc)? I believe that it determines if the return value of somefunc() is non-false. It will have the added benefit then that you can use the return value afterwards if it was, for example, not true, but a string or something instead. Thanks, Ash http://www.ashleysheridan.co.uk
Re: [PHP] Assignment in Conditional - How are they evaluated?
On Thu, Oct 29, 2009 at 10:58 AM, Mark Skilbeck markskilb...@gmail.comwrote: How is the following evaluated: [code] if ($data = somefunc()) ... [/code] Ignoring the 'assignment inside condition' arguments, is the return value of somefunc() assigned to $data, and then $data's value is evaluated (to true or false), or is the actual assignment tested (does the assignment fail, etc)? -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php The code is interpreted this way... $data = somefunc(); if ($data) -- Martin Scotta
Re: [PHP] Assignment in Conditional - How are they evaluated?
Ashley Sheridan wrote: On Thu, 2009-10-29 at 13:58 +, Mark Skilbeck wrote: How is the following evaluated: [code] if ($data = somefunc()) ... [/code] Ignoring the 'assignment inside condition' arguments, is the return value of somefunc() assigned to $data, and then $data's value is evaluated (to true or false), or is the actual assignment tested (does the assignment fail, etc)? I believe that it determines if the return value of somefunc() is non-false. It will have the added benefit then that you can use the return value afterwards if it was, for example, not true, but a string or something instead. I do this all the time... an example is the following: ?php if( ($user = get_current_user()) ) { // Yay, we have a user... do something. echo $user-name(); } else { // Handle no current user. echo 'Anonymous'; } ? Cheers, Rob. -- http://www.interjinn.com Application and Templating Framework for PHP -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Fwd: [PHP] Assignment in Conditional - How are they evaluated?
On Thu, Oct 29, 2009 at 11:11 AM, Robert Cummings rob...@interjinn.comwrote: Ashley Sheridan wrote: On Thu, 2009-10-29 at 13:58 +, Mark Skilbeck wrote: How is the following evaluated: [code] if ($data = somefunc()) ... [/code] Ignoring the 'assignment inside condition' arguments, is the return value of somefunc() assigned to $data, and then $data's value is evaluated (to true or false), or is the actual assignment tested (does the assignment fail, etc)? I believe that it determines if the return value of somefunc() is non-false. It will have the added benefit then that you can use the return value afterwards if it was, for example, not true, but a string or something instead. I do this all the time... an example is the following: ?php if( ($user = get_current_user()) ) { // Yay, we have a user... do something. echo $user-name(); } else { // Handle no current user. echo 'Anonymous'; } ? Cheers, Rob. -- http://www.interjinn.com Application and Templating Framework for PHP -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php There is a situation when common-sense can fail... if( $a $b = do_something() ) The problem here is the precedence between and = The correct sentence will be... if( $a ($b = do_something()) ) C coders knows this behaviour very well. cheers, Martin Scotta -- Martin Scotta
Re: [PHP] Assignment in Conditional - How are they evaluated?
On Thu, Oct 29, 2009 at 10:23 AM, Martin Scotta martinsco...@gmail.com wrote: On Thu, Oct 29, 2009 at 11:11 AM, Robert Cummings rob...@interjinn.comwrote: Ashley Sheridan wrote: On Thu, 2009-10-29 at 13:58 +, Mark Skilbeck wrote: How is the following evaluated: [code] if ($data = somefunc()) ... [/code] Ignoring the 'assignment inside condition' arguments, is the return value of somefunc() assigned to $data, and then $data's value is evaluated (to true or false), or is the actual assignment tested (does the assignment fail, etc)? I believe that it determines if the return value of somefunc() is non-false. It will have the added benefit then that you can use the return value afterwards if it was, for example, not true, but a string or something instead. I do this all the time... an example is the following: ?php if( ($user = get_current_user()) ) { // Yay, we have a user... do something. echo $user-name(); } else { // Handle no current user. echo 'Anonymous'; } ? Cheers, Rob. -- http://www.interjinn.com Application and Templating Framework for PHP -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php There is a situation when common-sense can fail... if( $a $b = do_something() ) The problem here is the precedence between and = The correct sentence will be... if( $a ($b = do_something()) ) C coders knows this behaviour very well. cheers, Martin Scotta -- Martin Scotta Assignment operations in PHP have the side effect of returning the assignment. For example: function return_false() { return false; } var_dump(return_false()); //bool(false); var_dump($a = return_false()); //bool(false); var_dump($a = 1); // int(1) var_dump($a = hello world!); //string... So the same thing that allows you to do: $a = $b = $c = $d = 154; which works because $d = 154 returns 154, which is assigned to $c, which returns 154... is how assignment in conditionals or looping works: if($a = return_false()) { } var_dump($a); //bool(false) if($a = hello) {} var_dump($a); //string, hello So what's really happening is the return value of the expression $a = is evaluated and that's used to determine the truth of the conditionality. if($a = return_false()) is exactly the same thing as if(return_false()) save for you capture the output of the function, rather than just allow the conditional operator to see it. It's functionally equivalent to $a = return_false(); if($a) {} but it's important to understand that __assigning a variable to a value in PHP is an expression with a return value___ and that return value is the value that you assigned to the variable. -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php