PHP: ফাঁকা প্রোগ্রাম নিয়ে ঘুরে বেড়ানোর যুক্তি শিখুন — Control Structures | Part 2

Abu Sayed
7 min readFeb 22, 2024

--

কন্ট্রোল স্ট্রাকচারগুলি একজন প্রোগ্রামারের প্রাণের মতো। উত্তরাঞ্চলের জঙ্গল থেকে উদাহরণ, ব্যাখ্যা এবং কোডের মাধ্যমে এই গুরুত্বপূর্ণ বিষয়গুলি আজ শিখে নিন। ( PHP: Control Structures )

PHP তে Control Structures এর সহজ বাংলা ব্যাখ্যা
PHP তে Control Structures এর সহজ বাংলা ব্যাখ্যা

আচ্ছা তো প্রিয় শিক্ষার্থীরা, কেমন আছেন? পরের পর্বে আপনাদের কাছে চলে আসতে পেরে আমি খুবই উত্সাহিত। আজ আমরা আরও গভীরে যাব এবং কিছু জটিল কিন্তু গুরুত্বপূর্ণ কনসেপ্টগুলি দেখব। কন্ট্রোল স্ট্রাকচারগুলি কি জানেন? না জানলে চিন্তা করবেন না, আমি এখানে আপনাকে সব শেখাব।

কন্ট্রোল স্ট্রাকচারগুলিকে তালিকাবদ্ধ করা

ধরুন আপনি একটা বিশাল জঙ্গল ঘুরতে যাচ্ছেন। সেখানে ঝোপ-ঝাড়, জীবজন্তু, পাহাড়-পর্বত যা খুশি আছে। কিন্তু আপনি কি অন্ধভাবে ঘুরবেন? বিপদে পড়তে হবে না তো? একই কথা প্রোগ্রামিংয়েও প্রযোজ্য। আপনার কাজটা করতে হবে, কিন্তু নিশ্চিত থাকতে হবে যে আপনি সঠিক পথে আছেন।

এখানেই কন্ট্রোল স্ট্রাকচারগুলির ভূমিকা আসে। এগুলি হল কিছু বিশেষ নির্দেশ যা নিয়ন্ত্রণ করে কোন কোডটি চলবে এবং কখন চলবে। অনেক রকম কন্ট্রোল স্ট্রাকচার আছে যেমন:

  1. Conditional Statements: if, else, elseif
  2. Loop Statements: for, while, do-while
  3. Switch Statement
  4. Break and Continue
  5. Return Statement
  6. Goto (যদিও এটি বর্তমানে বেশি উপযোগী নয়)

এদের প্রত্যেকের বিভিন্ন ব্যবহার আছে। আমরা কয়েকটি গুরুত্বপূর্ণ দিকে নজর দেব।

শর্ত রাখতে if…else

চিন্তা করুন, জঙ্গলে পৌঁছানোর পরপরই আপনি বৃষ্টিতে ভিজে গেলেন। কি করবেন তখন? আপনি যদি একটা ছাতা নিয়ে থাকেন তাহলে তা খুলবেন, নাহলে জঙ্গলের ফাঁকে লুকিয়ে থাকবেন। দেখছেন, এখানে একটা শর্ত আছে এবং অবস্থা অনুযায়ী দুইটি কাজের মধ্যে একটি করতে হবে।

$have_umbrella = true; 
if ($have_umbrella) {
echo "আমি ছাতা খুলে চলব";
} else {
echo "আমি জঙ্গলের ফাঁকে লুকিয়ে থাকব";
}

উপরের কোডটি দেখুন। if নির্দেশটি যাচাই করে যে $have_umbrella ভ্যারিয়েবলটি true কিনা। যদি তাই হয়, তাহলে প্রথম ব্লকের কোডগুলি চলবে। নাহলে else অংশটি চলবে। খুব সহজ, তাই না?

Loop করার জন্য for এবং while

কোনও কাজ একবারই না, বারবার করতে হয়। ধরুন আপনি বিভিন্ন প্রজাতির গাছের একটি তালিকা বানাতে চান। কি করবেন তখন প্রত্যেকটি গাছের কাছে গিয়ে তার নাম লিখবেন? একই কাজটা বারবার করতে হবে। এই জন্য লুপ ব্যবহার করে।

$tree_list = ["বাহিনী", "কাঠাল", "আম", "জাম", "লিচু"];
for ($i=0; $i < count($tree_list); $i++) { 
echo $tree_list[$i] . "<br>";
}

এখানে for লুপটি প্রত্যেকটি আইটেমে একবার করে চলবে। $i শুরু থেকে শেষ পর্যন্ত লুপ চালাবে। অথবা আপনি while লুপও ব্যবহার করতে পারেন।

এছাড়াও আছে foreach লুপ যা আরেগুলিতে কাজ করার জন্য উপযোগী। তাহলে কন্ট্রোল স্ট্রাকচারগুলিকেই প্রোগ্রামারদের জীবন বলতে পারেন। এরা হল আপনার কাজগুলিকে নিয়ন্ত্রণ করার জন্য বিশেষ কীওয়ার্ড।

কেসে কেসে Switch

একই রকম কোন অবস্থার জন্য একাধিক পদক্ষেপ নিতে হলে switch ব্যবহার করা যায়। ধরুন আপনি জঙ্গলে একটা প্রাণী দেখলেন। এখন আপনাকে কিছু কাজ করতে হবে যা প্রাণীর ধরনের উপর নির্ভর করবে।

$animal = "বাঘ";
switch ($animal) {
case "হাতি":
echo "হাতির কাছে যাবেন না, খুব বড়!";
break;
case "বাঘ":
echo "বাঘের সামনে দাঁড়াবেন না, ছিটকে পালাবেন!";
break;
default:
echo "এটা নিরাপদ প্রাণী";
}

switch নির্দেশটি $animal এর মান অনুযায়ী কাজ করবে। যদি মান "হাতি" হয়, তাহলে প্রথম কেসের কাজটি করবে। আর যদি কোনো কেস মিলে না তাহলে default কাজটি করবে।

উপরের উদাহরণগুলি থেকে বুঝতে পারছেন যে কোন অবস্থায় কি করতে হবে তা কন্ট্রোল স্ট্রাকচারগুলি বলে দেয়। এগুলি আপনার কোডের গতিপথ নির্ধারণ করে। এছাড়াও আরও কিছু বৈশিষ্ট্য আছে যেমন break এবং continue যা লুপগুলিকে নিয়ন্ত্রণ করতে সাহায্য করে।

if ষ্টেটমেন্ট

if ষ্টেটমেন্টটা হল সবচেয়ে সাধারণ এবং গুরুত্বপূর্ণ নিয়ন্ত্রণ কাঠামো। এটা একটা শর্ত নিয়ে কাজ করে। যদি শর্তটা সত্য হয় তাহলে এক কাজ করবে, আর যদি মিথ্যা হয় তাহলে অন্য কিছু করবে। একটু কোড দেখি:

$age = 20;
if ($age >= 18) {
echo "You can vote!";
} else {
echo "You cannot vote yet :(";
}

এখানে, if এর শর্তটা হল $age >= 18। যদি এই শর্তটা সত্য হয়, তাহলে "You can vote!" প্রিন্ট হবে। আর যদি মিথ্যা হয়, তাহলে "You cannot vote yet :(" প্রিন্ট হবে।

আরেকটু জটিল একটা উদাহরণ দেখি:

$mark = 82;
if ($mark >= 80) {
echo "You got A+";
} elseif ($mark >= 70) {
echo "You got A";
} elseif ($mark >= 60) {
echo "You got A-";
} else {
echo "You failed :(";
}

এখানে elseif ব্যবহার করা হয়েছে যাতে একাধিক শর্ত চেক করা যায়। প্রথমে $mark >= 80 চেক করবে, যদি এটা মিথ্যা হয় তাহলে দ্বিতীয় শর্তটা চেক করবে, সেটাও মিথ্যা হলে তৃতীয়টা চেক করবে। সব শর্ত মিথ্যা হলেই শেষের else ব্লকটা রান হবে।

swith লুপ

switch স্টেটমেন্টটা একটু ভিন্ন ধরনের নিয়ন্ত্রণ কাঠামো। এটা একটা ভেলু নিয়ে কাজ করে এবং সেই ভেলুর উপর ভিত্তি করে বিভিন্ন case এর মধ্যে একটা রান করে।

$favFood = "burger";
switch ($favFood) {
case "pizza":
echo "Your favorite food is pizza!";
break;
case "burger":
echo "Your favorite food is burger!";
break;
default:
echo "Your favorite food is something else :(";
}

এখানে, $favFood এর ভেলু "burger" হওয়ায় case "burger": এর নিচের লাইনটা প্রিন্ট হবে। break স্টেটমেন্টটা ব্যবহার করা হয়েছে যাতে case এর বাইরে না বেরিয়ে যায়। যদি $favFood এর কোন ভেলু না মিলত তাহলে default কেসটা রান হত।

একটু জটিল একটা উদাহরণ দেখি:

$dayNumber = 5;
switch ($dayNumber) {
case 1:
case 2:
case 3:
case 4:
case 5:
echo "It's a weekday :(";
break;
case 6:
case 7:
echo "Yay, it's the weekend! :D";
break;
default:
echo "Invalid day number";
}

এখানে একাধিক case এর জন্য একই কোডব্লক রান করা হয়েছে। যদি $dayNumber এর ভেলু ১ থেকে ৫ এর মধ্যে হয়, তাহলে প্রথম কোডব্লকটা রান হবে, আর যদি ৬ বা ৭ হয় তাহলে দ্বিতীয় কোডব্লকটা রান হবে।

তেরনারি অপারেটর

তেরনারি অপারেটর একটু ভিন্ন ধরনের একটা শর্তীয় স্টেটমেন্ট। এটা খুব সংক্ষিপ্ত এবং মূলত একটা শর্ত এবং দুইটা ভেলু নিয়ে কাজ করে। এটার সিনটেক্স হল:

condition ? value_if_true : value_if_false

একটু উদাহরণ দেখলে বুঝা যাবে:

$age = 22;
$canVote = ($age >= 18) ? "Yes" : "No";
echo $canVote; // Output: Yes

এখানে, শর্তটা হল $age >= 18। যদি এটা সত্য হয়, তাহলে $canVote এর ভেলু হবে "Yes", অন্যথায় "No" হবে। এটা খুবই সংক্ষিপ্ত এবং স্পেস সেভিং করতে পারে।

আরেকটু জটিল উদাহরণ:

$num = 7;
$oddEven = ($num % 2 == 0) ? "Even" : (($num > 0) ? "Positive Odd" : "Negative Odd");
echo $num . " is " . $oddEven; // Output: 7 is Positive Odd

এখানে প্রথম শর্তটা হল $num % 2 == 0, যা চেক করবে যে $num টা জোর না বিজোর। যদি জোর হয়, তাহলে "Even" প্রিন্ট হবে। আর যদি বিজোর হয়, তাহলে আরো একটা তেরনারি অপারেটর ব্যবহার করা হবে যা চেক করবে যে $num টা ইতিবাচক না ঋণাত্মক। এই ধরনের নেস্টেড তেরনারি অপারেটর খুবই শক্তিশালী এবং সংক্ষিপ্ত।

while লুপ

while লুপটা হল একটা লুপিং কাঠামো যা একটা শর্ত নিয়ে কাজ করে। এই শর্তটা যতক্ষণ সত্য থাকবে ততক্ষণই লুপটা চলতে থাকবে।

$i = 1;
while ($i <= 5) {
echo $i . " ";
$i++;
}
// Output: 1 2 3 4 5

এখানে, $i এর ভেলু প্রথমে ১ এবং শর্তটা হল $i <= 5। যতক্ষণ এই শর্তটা সত্য থাকবে, ততক্ষণই লুপটা রান করবে এবং প্রতিবার $i এর ভেলু ১ করে বাড়বে। শেষ পর্যন্ত যখন $i এর ভেলু হবে ৬, তখন শর্তটা মিথ্যা হবে এবং লুপটা বন্ধ হয়ে যাবে।

একটু জটিল উদাহরণ দেখা যাক:

$sum = 0;
$num = 1;
while ($num <= 100) {
$sum += $num;
$num++;
}
echo "The sum of numbers from 1 to 100 is: " . $sum;
// Output: The sum of numbers from 1 to 100 is: 5050

এখানে আমরা ১ থেকে ১০০ পর্যন্ত সব সংখ্যার যোগফল বের করছি। প্রথমে $sum এর ভেলু ০ এবং $num এর ভেলু ১। লুপটা চলতে থাকবে যতক্ষণ না $num এর ভেলু ১০১ হয়ে যায়। প্রতি ইটারেশনে $sum$num এর ভেলুটা যোগ করা হচ্ছে এবং $num এর ভেলু ১ করে বাড়ানো হচ্ছে। শেষ পর্যন্ত যখন লুপ থেকে বেরিয়ে আসবে তখন $sum এর ভেলু হবে ১+২+৩+...+১০০ = ৫০৫০।

do…while লুপ

do...while লুপটা while লুপের মতই কাজ করে, শুধু একটু পার্থক্য হল যে এটা অন্তত একবার কোডব্লকটা রান করে তারপর শর্তটা চেক করে।

$i = 1;
do {
echo $i . " ";
$i++;
} while ($i <= 5);
// Output: 1 2 3 4 5

এখানে, প্রথমেই কোডব্লকটা রান হয়েছে এবং $i এর ভেলু প্রিন্ট করেছে। তারপর শর্তটা চেক করেছে যে $i <= 5 কিনা। কারণ এখন $i এর ভেলু ২, তাই লুপটা আবার রান করেছে। এভাবে চলতে থাকবে যতক্ষণ না $i এর ভেলু হবে ৬।

একটু জটিল উদাহরণ:

$num = 32451;
$isEven = false;
do {
if ($num % 2 == 0) {
$isEven = true;
break;
}
$num = (int)($num / 10);
} while ($num != 0);
if ($isEven) {
echo "The number contains at least one even digit.";
} else {
echo "The number does not contain any even digit.";
}

এই কোডটি চেক করবে যে একটা নাম্বারে কোন জোর ডিজিট আছে কিনা। প্রথমে $isEven এর ভেলু মিথ্যা করা হয়েছে। তারপর একটা do...while লুপ রান করা হয়েছে। লুপের মধ্যে, যদি $num এর শেষ ডিজিটটা জোর হয়, তাহলে $isEven এর ভেলু সত্য করে দেওয়া হবে এবং break স্টেটমেন্টের মাধ্যমে লুপ থেকে বেরিয়ে আসা হবে। যদি জোর ডিজিট না থাকে, তাহলে $num এর ভেলু (int)($num / 10) দ্বারা আপডেট করা হবে, যা শেষের ডিজিটটা বাদ দিয়ে বাকি অংশটুকু রাখবে। এভাবে লুপটা চলতে থাকবে যতক্ষণ না $num এর ভেলু ০ হয়ে যায়।

সামারি এবং একটি ছোট প্রোগ্রাম

সবমিলিয়ে বলতে গেলে, কন্ট্রোল স্ট্রাকচারগুলি হল প্রোগ্রামিং এর হৃদয়। এদের মাধ্যমেই আপনি নিয়ন্ত্রণ করতে পারবেন কোন কোড কখন চলবে। এগুলি অনেক জটিল প্রোগ্রামকে সহজ করে তোলে। আচ্ছা, এখন একটু পরীক্ষা করা যাক।

একটি ছোট প্রোগ্রাম আপনাকে দেখাই। এটি একটি তালিকা থেকে নিদৃষ্ট কিছু মান বের করে প্রিন্ট করবে। নজর দিন:

// একটি এরে
$numbers = [15, 37, 92, 65, 39, 7, 25, 80];
// দুইটি শর্ত ঠিক করা
$min = 30;
$max = 75;
// লুপ চালিয়ে নিদৃষ্ট মানগুলি বের করা
echo "এই মানগুলি $min এবং $max এর মধ্যে: ";
foreach ($numbers as $x) {
if ($x >= $min && $x <= $max) {
echo $x . " ";
}
}

এই প্রোগ্রামে একটি লুপ চলছে। প্রতিবার লুপটি if শর্তের সাহায্যে মান চেক করছে। যদি মানটি ৩০ ও ৭৫ এর মধ্যে হয়, তাহলে তা প্রিন্ট করে দিচ্ছে।

বুঝতে পারছেন তো কিভাবে কন্ট্রোল স্ট্রাকচারগুলি কাজ করে? if, loop এবং শর্ত দিয়ে আমরা কোডের গতিকে নিয়ন্ত্রণ করছি। এভাবেই আপনি অনেক জটিল কাজ করতে পারবেন। শুধু একটু অনুশীলন লাগবে।

সো প্রিয় বন্ধুরা, কোড লেখা মজার একটা পথ। যদি কন্ট্রোল স্ট্রাকচারগুলি ঠিকমতো বুঝতে পারেন তাহলে আপনি অনেক শক্তিশালী হয়ে উঠবেন। তাই এই অধ্যায়টি ভালো করে পড়ুন এবং অনুশীলন করুন। পরের অধ্যায়টিতে দেখা যাবে লাইনে!

আর জানুনঃ PHP: Data Types | ডেটা টাইপস সম্পর্কে বাংলা টিউটোরিয়াল!

--

--

Abu Sayed
Abu Sayed

Written by Abu Sayed

Bangladeshi Full Stack Web Dev, Sys Admin & DevOps Engineer. Skills: Data analysis, SQL, Unity, C#. Python, PHP & Laravel. Me on: bd.linkedin.com/in/imabusayed

No responses yet