آموزش عملگر سه تایی برای شرط یک خطی در PHP

اگر به دنبال راهی برای ساده‌تر کردن کدهای خود هستید، استفاده از شرط یک خطی با عملگر ternary همان چیزی است که به آن احتیاج دارید! در این آموزش با ساختار شرط یک خطی در PHP آشنا می‌شویم. این‌طوری می‌توانیم برخی شرط‌هایمان را کوتاه‌تر و حرفه‌ای‌تر بنویسیم.

در تمام زبان‌های برنامه‌نویسی از شرط‌ها برای تصمیم‌گیری استفاده می‌کنیم. با if و else می‌توانیم مشخص کنیم که چه کدی اجرا شود و کدام بخش از کد نادیده گرفته شود.

مثلاً فرض کنید می‌خواهیم عضو ویژه (VIP) بودن یا نبودن کاربری که وارد سایتمان شده را بررسی کنیم و متناسب با آن، محتوای VIP را نمایش دهیم.

عملگر ternary در PHP

گاهی اوقات شرط‌هایی که می‌نویسیم خیلی کوتاه هستند و نوشتن چند خط کد برای آن کاری غیرضروری است. برای مثال، فرض کنید نمره نهایی کاربر که در متغیر $score ذخیره شده است. حال می‌خواهیم وضعیت درس (پاس‌شده یا مردودشده) را در متغیر $status تعریف کنیم.

اگر دوره رایگان آموزش PHP را گذرانده باشید، احتمالاً در گام اول کدی شبیه به زیر می‌نویسید:

<?php
 $score = 70;
 if($score >= 60){
     $status = "پاس‌شده";
 }else{
     $status = "مردودشده";
 }

وقتی شرطی شبیه به کد بالا داریم، می‌توانیم آن را به‌صورت شرط یک خطی PHP نیز بنویسیم.

در شرط بالا چه اتفاقی می‌افتد؟ بر اساس اینکه $score بیشتر یا مساوی 60 است یا خیر، دو مقدار متفاوت برای متغیر $status تعریف می‌شود.

شرط یک خطی که در باکس پایین می‌بینید، دقیقاً همین کار را انجام می‌دهد:

<?php
 $status = ($score >= 60) ? "passed" : "failed";

البته می‌توانستم بخش شرط را درون پرانتز نگذارم. نمونه‌اش را در مثال‌های بخش بعدی خواهید دید.

ساختار شرط یک خطی: عملگر سه تایی

عملگر ternary یا شرط یک خطی در PHP ساختاری شبیه به زیر دارد:

condition ? do_if_true : do_if_false;
  • مقداری که به‌جای condition قرار می‌گیرد باید true یا false برگرداند؛ دقیقاً مشابه شرطی که درون ساختار if-else می‌گذاریم.
  • do_if_true کاری است که در صورت صحیح بودن شرط انجام می‌شود. می‌تواند صرفاً یک مقدار باشد (مشابه مثال بالاتر) یا اینکه یک تابع PHP را فراخوانی کند.
  • برعکس، do_if_false در صورتی اجرا می‌شود که شرط ما برقرار نباشد؛ یعنی بخش else شرط در این تیکه از شرط یک خطی PHP قرار می‌گیرد.

استفاده از عملگر ternary (عملگر سه تایی) می‌تواند باعث کاهش خطوط کد و خوانایی بهتر در شرط‌های ساده شود. همچنین زمانی که می‌خواهیم از شرط‌های زیاد اما با ساختار ساده استفاده کنیم، بسیار برایمان کاربردی است. اما اگر شرط ما پیچیده باشد یا شرط‌های تودرتو (nested condition) داشته باشیم، استفاده از شرط تک خطی در PHP پیشنهاد نمی‌شود. در دوره PHP کاربردی بارها و بارها در موقعیت‌های مختلف از این ساختار برای ساده‌تر شدن کدهایمان استفاده می‌کنیم.

کار با شرط یک خطی در PHP

در این بخش پنج مثال از حالت‌های مختلف کار با ternary می‌زنم. سپس یک حالت کوتاه‌ترشده و خلاصه‌شده‌ی آن را برای حالت‌های خاص توضیح می‌دهم.

مقداردهی متغیر

مشابه مثالی که کمی قبل‌تر دیدید، وقتی بخواهیم مقدار یک متغیر را متناسب با یک شرط خاص مقداردهی کنیم، می‌توانیم از این ساختار استفاده کنیم.

<?php
 $gender = 'm';
 $gender_title = $gender=='m' ? 'male' : 'female';

در کد بالا با توجه به اینکه مقدار $gender برابر با m است یا نه، کلمه مرد/زن به متغیر موردنظر تخصیص داده شده است. دقت کنید که اگر مقدار $gender هر چیزی غیر از m باشد، کلمه «female» برای $gender_title تعریف می‌شود.

بنابراین اگر ممکن است در پروژه شما این مقدار چیز غیرمنتظره‌ای باشد، شاید بهتر باشد از ساختار if و elseif استفاده کنید. در آموزش شرط در PHP به‌طور کامل حالت‌های مختلف شرطی را بررسی کرده‌ایم.

فراخوانی تابع

مشابه حالت قبلی، می‌توانیم دو تابع مختلف را بر اساس برقرار بودن یا نبودن condition با ساختار شرط یک خطی PHP صدا بزنیم:

<?php
 $is_admin ? show_the_list() : show_error();
ساختار اپراتور ternary در PHP
ساختار اپراتور ternary در PHP

استفاده از isset برای مقدار پیش‌فرض

گاهی می‌خواهیم بررسی کنیم اگر یک متغیر وجود داشت (با isset()) از مقدارش استفاده کنیم و در غیر این‌صورت یک مقدار پیش‌فرض برایش در نظر بگیریم. فرض کنید می‌خواهیم بررسی کنم اگر پارامتر id در درخواست GET به این صفحه ارسال شده بود، از مقدار ارسالی و در غیر این‌صورت از 0 استفاده کنم.

ساختار شرطی کاملش چیزی شبیه به زیر می‌شود:

<?php
 if( isset($_GET['id']) ){
     $id = $_GET['id'];
 }else{
     $id = 0;
 }

کد زیر نیز دقیقاً همین کار را در یک خط انجام می‌دهد:

<?php
 $id = isset($_GET['id']) ? $_GET['id'] : 0;

اگر با روش‌های ارسال داده آشنا نیستید، پیشنهاد می‌کنم جلسات GET و POST در PHP و کار با فرم PHP را حتماً ببینید.

چاپ مقدار با شرط یک خطی PHP

فرض کنید متغیر $is_loggedin وضعیت لاگین شده یا نشده‌ی کاربر فعلی را نگهداری کرده است. اگر true باشد یعنی کاربر به حساب کاربری خودش وارد شده وگرنه هنوز وارد سایت نشده است.

برای نوشتن متن درون یک دکمه می‌توانم متناسب با وضعیت کاربر عمل کنم:

<?php
 echo $isLoggedIn ? "My Dashboard" : "Login/Sign up";

این متن می‌تواند به‌عنوان متن یک دکمه استفاده شود. به‌طور مشابه می‌توانید لینک آن دکمه را نیز به‌طور پویا تغییر دهید.

شرط تو در توی یک خطی PHP

می‌دانید که ما می‌توانیم شرط‌های تو در تو داشته باشیم. اگر از شرط یک خطی در PHP استفاده کنیم، مشکلی در عملکردش به‌وجود نمی‌آید اما پیشنهاد نمی‌شود! چون خوانایی کد کم می‌شود.

به مثال زیر توجه کنید. چنین ساختاری با اینکه نتیجه‌ی موردنظر را می‌دهد اما استفاده از آن توصیه نمی‌شود.

<?php
 echo $score >= 80 ? "Great" : ($score > 60 ? "Good" : "Try more");

در این کد، اگر نمره ($score) بزرگ‌تر یا مساوی 80 باشد، مقدار «Great» چاپ می‌شود. اگر نه، اگر بیشتر از 60 بود «Good» و در غیر این‌صورت «Try More» چاپ می‌شود. به‌نوعی ساختار if با elseif و else ایجاد کرده‌ایم.

عملگر Null Coalescing در PHP

کمی قبل‌تر، مثالی داشتیم که با isset() بررسی می‌کردم اگر یک متغیر خاص وجود داشت، مقدارش وگرنه یک مقدار پیش‌فرض را در نظر می‌گیرد. در این‌طور مواقع می‌توانیم از عملگر ?? کمک بگیریم.

<?php
 $id = $_GET['id'] ?? 0;

قطعه کد بالا دقیقاً معادل کد زیر است:

<?php
 $id = isset($_GET['id']) ? $_GET['id'] : 0;
آموزش اتصال و کار با دیتابیس در PHP

آموزش اتصال و کار با دیتابیس در PHP

جمع‌بندی آموزش شرط یک خطی با ternary

شرط یک خطی یا عملگر ternary یا عملگر سه‌تایی یکی از روش‌های ساده‌تر کردن شرط‌های کوتاه در PHP است. به کمک این روش می‌توانید کدهایی تمیزتر و کوتاه‌تر بنویسید. ساختار کلی آن به‌صورت زیر است:

condition ? if_true : if_false;

توجه کنید که از این روش زمانی استفاده کنید که شرط شما سده است. برای شرط‌های پیچیده برنامه نویسی، بهتر است از همان بلوک‌های if و else یا دستور switch در PHP استفاده کنید. همچنین هنگامی که می‌خواهید از شرط برای مقداردهی یک متغیر استفاده کنید نیز شرط‌های تک خطی گزینه خوبی خواهند بود.

البته عملگر سه تایی را می‌توان به شکلی نوشت که شبیه به switch عمل کند. می‌توانید نمونه کدش را در مستندات اصلی آن (+) ببینید. اما استفاده از آن، خیلی پیشنهاد نمی‌شود.

امیدوارم از این آموزش استفاده کرده باشید. اگر سؤال یا تجربه‌ای در استفاده از شرط‌های تک خطی PHP دارید، از بخش دیدگاه‌های پایین همین آموزش با ما مطرح کنید.