On Thu, Oct 29, 2009 at 11:11 AM, Robert Cummings <robert@xxxxxxxxxxxxx>wrote: > Ashley Sheridan wrote: > >> On Thu, 2009-10-29 at 13:58 +0000, 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