PHP में दो conditional operators हैं जो similar दिखते हैं लेकिन अलग-अलग उद्देश्यों के लिए हैं।
Ternary Operator (? :)
किसी भी condition के आधार पर दो values में से एक चुनता है।
<?php
// Syntax: (condition) ? valueIfTrue : valueIfFalse;
$age = 20;
$status = ($age >= 18) ? 'वयस्क' : 'नाबालिग';
echo $status; // वयस्क
// Equivalent if-else:
if ($age >= 18) {
$status = 'वयस्क';
} else {
$status = 'नाबालिग';
}
// Nested ternary (avoid - hard to read)
$result = $a > $b ? ($a > $c ? $a : $c) : ($b > $c ? $b : $c);
Null Coalescing Operator (??) - PHP 7.0+
केवल null (या undefined) check करता है। False, 0, '' को valid values मानता है।
<?php // Syntax: (variable) ?? defaultValue; $username = $_GET['username'] ?? 'Guest'; // Equivalent to: $username = isset($_GET['username']) ? $_GET['username'] : 'Guest'; // Key difference: 0, false, '' को null नहीं मानता $count = 0; echo $count ?? 10; // Output: 0 (नहीं 10!) $name = ''; echo $name ?? 'Anonymous'; // Output: '' (नहीं 'Anonymous')
Side-by-Side Comparison
| Value | $val ? 'yes' : 'no' | $val ?? 'default' |
|---|---|---|
null | 'no' | 'default' |
undefined | Notice + 'no' | 'default' |
0 | 'no' | 0 |
'' (empty string) | 'no' | '' |
false | 'no' | false |
[] (empty array) | 'no' | [] |
'hello' | 'yes' | 'hello' |
123 | 'yes' | 123 |
Null Coalescing Assignment (??=) - PHP 7.4+
<?php // केवल यदि null हो तो assign करें $config['timeout'] ??= 30; $config['retries'] ??= 3; // Equivalent to: if (!isset($config['timeout'])) $config['timeout'] = 30;
चेनिंग (Chaining)
<?php
// Ternary chaining
$val = $a ? $a : ($b ? $b : ($c ? $c : 'default'));
// Null coalescing chaining - बहुत साफ़
$val = $a ?? $b ?? $c ?? 'default';
// Practical: Config fallback chain
$dbHost = $_ENV['DB_HOST'] ?? $_SERVER['DB_HOST'] ?? config('db.host') ?? 'localhost';
Elvis Operator (?:) - PHP 5.3+
Ternary का short form: expr1 ?: expr2 = expr1 ? expr1 : expr2
<?php $name = $inputName ?: 'Guest'; // यदि $inputName truthy तो वही, वरना 'Guest' // vs Null coalescing $name = $inputName ?? 'Guest'; // यदि $inputName null/unset तो 'Guest' // Difference: $inputName = '0'; echo $inputName ?: 'Guest'; // 'Guest' (क्योंकि '0' falsy है) echo $inputName ?? 'Guest'; // '0' (क्योंकि '0' null नहीं है)
कौन सा कब उपयोग करें?
| स्थिति | Operator | कारण |
|---|---|---|
| Boolean condition पर आधारित | ? : | True/false logic |
| Variable set है या नहीं (null check) | ?? | Only null/unset |
| Default value for missing config | ?? | 0, false, '' valid हैं |
| Fallback chain | ?? | Clean chaining |
| Truthy/falsy check with default | ?: | Short ternary |