views:

49

answers:

2

Hi,

I was studying some code I found on the web recently, and came across this php syntax:

<?php $framecharset && $frame['charset'] = $framecharset; ?>

Can someone explain what is going on in this line of code? What variable(s) are being assigned what value(s), and what is the purpose of the && operator, in that location of the statement?

Thanks! Pat

+2  A: 

Ah, I just wrote a blog post about this idiom in javascript:

http://www.mcphersonindustries.com/

Basically it's testing to see that $framecharset exists, and then tries to assign it to $frame['charset'] if it is non-null.

The way it works is that interpreters are lazy. Both sides of an && statement need to be true to continue. When it encounters a false value followed by &&, it stops. It doesn't continue evaluating (so in this case the assignment won't occur if $framecharset is false or null).

Some people will even put the more "expensive" half of a boolean expression after the &&, so that if the first condition isn't true, then the expensive bit won't ever be processed. It's arguable how much this actually might save, but it uses the same principle.

Alex Mcp
Your explanation is VERY clear. Thank you.
cube
Alex, what would the exact javascript equivalent syntax look like?
cube
Oh, I see it on your blog, Thanks.
cube
+2  A: 

&& in PHP is short-circuited, which means the RHS will not be evaluated if the LHS evaluates to be false, because the result will always be false.

Your code:

$framecharset && $frame['charset'] = $framecharset;

is equivalent to :

if($framecharset) {
    $frame['charset'] = $framecharset;
}

Which assigns the value of $framecharset as value to the array key charset only if the value evaluates to be true and in PHP

All strings are true except for two: a string containing nothing at all and a string containing only the character 0

codaddict