Skip to main content
The && (Logical AND) operator is a binary operator that evaluates two operands and returns a boolean true strictly if both the left and right operands evaluate to true after implicit boolean coercion. If either or both operands evaluate to false, the expression returns false.
$result = $expression1 && $expression2;

Truth Table

The operator follows standard boolean logic:
  • true && true yields true
  • true && false yields false
  • false && true yields false
  • false && false yields false

Short-Circuit Evaluation

The && operator implements short-circuit evaluation. PHP evaluates the left operand first. If the left operand evaluates to false, the overall expression is guaranteed to be false. Consequently, PHP immediately terminates the evaluation and bypasses the right operand entirely.
// The function expensiveOperation() is never executed
$result = false && expensiveOperation(); 

Type Coercion (Juggling)

PHP does not require the operands to be strict booleans. Non-boolean values are implicitly cast to booleans during evaluation. Values considered “falsy” (e.g., 0, 0.0, "", "0", null, empty arrays) evaluate to false. All other values are “truthy” and evaluate to true.
$a = 1 && "text";    // true (both are truthy)
$b = 0 && "text";    // false (0 is falsy)
$c = [] && true;     // false (empty array is falsy)
Note: Regardless of the original types of the operands, the && operator always returns a strict boolean (true or false), unlike some languages (like JavaScript) that return the value of the last evaluated operand.

Operator Precedence

The && operator has a higher precedence than the assignment operator (=), but a lower precedence than comparison operators (like ==, >, <). This precedence dictates how expressions are grouped. It is a critical distinction when comparing && to PHP’s alternative logical AND operator, and, which has a lower precedence than assignment.
// && has higher precedence than =
$x = true && false; 
// Evaluated as: $x = (true && false)
// Result: $x is false

// 'and' has lower precedence than =
$y = true and false; 
// Evaluated as: ($y = true) and false
// Result: $y is true
Tired of Poor PHP Skills? Fix That With Deep Grasping!Learn More