Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.syntblaze.com/llms.txt

Use this file to discover all available pages before exploring further.

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.
$result = $expression1 ?: $expression2;

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:
// Shorthand
$result = $expression1 ?: $expression2;

// Standard Ternary Equivalent
$result = $expression1 ? $expression1 : $expression2;

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).
$var = "0";

$a = $var ?: "default"; // Returns "default" (because "0" is falsy)
$b = $var ?? "default"; // Returns "0" (because "0" is not null)
Master PHP with Deep Grasping Methodology!Learn More