However, the way it's written in the article, the intent is to merely test foo() and then execute bar() if foo() returns true. Even though I'm familiar with &&, it took me a minute to understand this as well. I'd be eqaully annoyed seeing this in production code.
foo() or die();
idiom to be quite readable. And if you're familiar with that, this is a pretty straightforward extension.
The main flaw of the technique is that the author uses the '&&' not as a logical operator (the intuitive use) but as a conditional operator.
'&&' is the 'Logical AND'. The statement "foo() && bar();" just doesn't make initial sense, because the logical result of the expression is thrown out.
After thinking this, the programmer probably will realize that the functions are actually called to evaluate the expression. And then finally (hopefully) the programmer realizes that they are evaluated short-circuit.
So, the code may be functional but it is not very readable.
Actually, the result is not thrown out: the && operator produces the value of its first operand if the first operand is falsy, otherwise it produces the value of the second operand.
For what it's worth, there's also a procedural reading of "foo() && bar()" along the lines of "fill out this form AND win a prize!".
(if (foo) (bar))
equals to (and (foo) (bar))