Taming the Elvis Operator (?:) in PHP
The mysterious ?: operator has graced some PHP code, leaving you puzzled. This concise article delves into its enigmatic nature, unraveling its true purpose.
Unveiling the ?: Operator
The ?: operator, also known as the "Elvis operator," functions akin to a ternary operator. However, its unique characteristic lies in the absence of an expression to evaluate to if the predicate proves true. Here's a breakdown of its behavior:
It evaluates to the left operand if the left operand is truthy, i.e., not null, empty string, false, or zero.
If the left operand is falsy, it evaluates to the right operand.
Crucially, the expression for the left operand is evaluated only once, ensuring efficiency.
Illustrative Examples
To further clarify, consider the following code snippet:
$items = $items ?: $this->_handle->result('next', $this->_result, $this);
In this instance, if $items is truthy (non-null or non-empty), the value of $items is assigned to itself. However, if $items is falsy, the result of $this->_handle->result('next', $this->_result, $this) is assigned to $items. This effectively handles undefined values by providing a default value.
Additional Applications
The ?: operator also proves useful in self-checking scenarios:
foo = foo ?: bar;
Here, foo will be assigned the value of bar if foo is null or falsy. Otherwise, foo remains unchanged.
Showcase of Versatility
To illustrate its versatility, consider these examples:
var_dump(5 ?: 0); // 5 var_dump(false ?: 0); // 0 var_dump(null ?: 'foo'); // 'foo' var_dump(true ?: 123); // true var_dump('rock' ?: 'roll'); // 'rock' var_dump('' ?: 'roll'); // 'roll' var_dump('0' ?: 'roll'); // '0' var_dump('42' ?: 'roll'); // '42'
The Origin of "Elvis Operator"
Its peculiar moniker, "Elvis operator," stems from its resemblance to Elvis Presley's hair. Just as Elvis's locks were either styled in a bushy pompadour or slicked back, the operator's left operand is either truthy or falsy, determining the resulting value.
Disclaimer: All resources provided are partly from the Internet. If there is any infringement of your copyright or other rights and interests, please explain the detailed reasons and provide proof of copyright or rights and interests and then send it to the email: [email protected] We will handle it for you as soon as possible.
Copyright© 2022 湘ICP备2022001581号-3