Skip to main content
The ?: operator, formally the shorthand ternary operator and colloquially known as the Elvis operator, performs a boolean truthiness check on its left operand. It returns the left operand if it evaluates to true, and the right operand if the left operand evaluates to false.

Evaluation Mechanics

  1. Boolean Conversion: PHP implicitly casts $expression1 to a boolean.
  2. Short-circuiting: If $expression1 is truthy, it is immediately returned. $expression2 is never evaluated, preventing any side effects associated with it.
  3. Single Evaluation: Unlike the standard ternary operator where the condition is repeated ($expr ? $expr : $alt), the Elvis operator evaluates $expression1 exactly once.

Syntactic Equivalence

The Elvis operator is strictly equivalent to the standard ternary operator, with the middle expression omitted:

Falsy Triggers

Because the operator relies on PHP’s standard type juggling for boolean evaluation, $expression2 will be returned if $expression1 resolves to any of the following falsy values:
  • false (boolean)
  • 0 (integer) or 0.0 (float)
  • "" (empty string) or "0" (string zero)
  • [] (empty array)
  • null

Error Handling and Undefined Variables

The ?: operator does not suppress diagnostic errors for undefined variables or array keys. If $expression1 references a variable that does not exist, PHP will throw an E_WARNING (or E_NOTICE in PHP < 8.0) before evaluating the expression as null (falsy) and returning $expression2.

Contrast with Null Coalescing (??)

It is critical to distinguish ?: from the null coalescing operator (??), as their evaluation criteria differ:
  • ?: evaluates based on truthiness (fails on 0, "", false, null, etc.).
  • ?? evaluates based on existence and non-nullity (fails only on null or undefined variables, suppressing undefined warnings).
Tired of Poor PHP Skills? Fix That With Deep Grasping!Learn More