Operatorul ternar (?) este un operator condițional care comparații condiționale, fiind o alternativă la instrucţiunile if-else simple și imbricate, făcând codul mai scurt şi mai lizibil. Este folosit în mai multe limbaje de programare. Sintaxa este redată mai jos.
|
1 |
(conditie) ? (declaratie1) : (declaratie2); |
Echivalentul operatoruliu ternar, redat prin IF arată cam aşa:
|
1 |
IF (conditie) {declaratie1;} ELSE {declaratie2;} |
- conditie: expresia de evaluat (returnează o valoare booleană).
- declaratie 1: instrucțiunea executată pentru valoarea adevărată.
- declaratie 2: instrucțiunea executată pentru valoarea falsă.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
/* Ex. 1 */ $variab = ISSET($_GET['variab']) ? $_GET['variab'] : ''; // is equivalent to: IF ( ISSET($_GET['variab']) ) { $variab =$_GET['variab'] ; } ELSE { $variab =''; } /* Ex. 2 */ //-- Basic True / False Declaration $is_admin = ($user['role'] == 'admin' ?) true : false; // is equivalent to: $is_admin = $user['role'] == 'admin'; // The == operator returns a boolean. /* Ex. 3 */ //-- Conditional Welcome Message echo 'Welcome '.($user['is_logged_in'] ? $user['first_name'] : 'Guest').'!'; /* Ex. 4 */ //-- Conditional PHP Redirect header('Location: '.($valid_login ? '/members/index.php' : 'login.php?errors=1')); EXIT(); |
Reţinem că, în mod obişnuit, operatorul ternar este folosit, în mod obișnuit, pentru atribuiri de valori și evaluări simple, nu pentru execuţia de funcţii multiple. Altfel, după cum se observă în exemplul 4, de mai sus, putem realiza şi redirecţionări. Astfel, dacă vrem totuşi, nişte redirecţionări, redăm mai jos încă un exemplu, cu două variante de „ternarizare”.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
if (!isset($_SESSION['logged']) || $_SESSION['logged'] !== true) { header("Location: login.php"); exit(); } else { header("Location: index.php"); exit();} // Varianta 1 header(!isset($_SESSION['logged']) || $_SESSION['logged'] !== true ? "Location: login.php" : "Location: index.php"); exit(); // Varianta 2 $url = (!isset($_SESSION['logged']) || $_SESSION['logged'] !== true) ? 'login.php' : 'index.php'; header("Location: $url"); exit(); |
Dacă am dori să avem funcţia exit() doar la redirecţionarea spre login.php:
|
1 |
(!isset($_SESSION['logged']) || $_SESSION['logged'] !== true) ? exit(header("Location: login.php")) : header("Location: index.php"); |