লজিকাল/Logical বা যৌক্তিক Operator

লজিকাল/Logical বা যৌক্তিক Operator খুবই গুরত্বপূর্ন যেকোন programing এর ক্ষেত্রে। একের অধিক এক্সপ্রেশন বা শর্ত যাচাই করতে এই অপারেটর ব্যবহার হয়। নিচে তালিকা দেয়া হল

উদাহরন

অপারেটর নাম

বর্ননা

$x and $y

And

TRUE হবে যদি $x এবং $y দুটোই TRUE রিটার্ন করে।

$x or $y

Or

TRUE হবে যদি $x অথবা $y এর যেকোন একটি TRUE হয়

$x xor $y

Xor

TRUE হবে যদি $x অথবা $y এর যেকোনটি TRUE হয়, তবে দুটোই হবেনা

! $x

Not

TRUE হবে যদি $x TRUE রিটার্ন না করে (বা TRUE না হয়)

$x && $y

And

TRUE হবে যদি $x এবং $y দুটোই TRUE রিটার্ন করে।

$x || $y

Or

TRUE হবে যদি $x অথবা $y এর যেকোন একটি TRUE হয়

$x এবং $y এর জায়গায় যেকোন এক্সপ্রেশন হতে পারে এমনকি একটা ফাংশনও হতে পারে যেটা TRUE (1) বা FALSE(0) রিটার্ন করবে।

<?php

$x = 15;

$y = 5;

if($x < $y and $x + $y > 10){

echo 'Both are true';

}else if($x < $y or $x + $y > 10){

echo 'at least one of them true';

}

?>

Output

at least one of them true

কারন $x, $y এর চেয়ে ছোট নয় কিন্তু দুটোই যোগ করলে ১০ এর চেয়ে বড় হবে তাই else..if এর ভিতরের কোডব্লক এক্সিকিউট হবে। কেননা সেখানে or লজিকাল অপারেটর দিয়েছি এবং দুটো কন্ডিশন (একটা $x < $y এবং অপরটি $x + $y > 10) আছে আর একটি TRUE রিটার্ন করেছে ($x + $y > 10 এই এক্সপ্রেশনটি) একই Expression গুলি if এর ভিতর ব্যবহার করেছি কিন্তু তবু প্রথম কোডব্লকে ঢুকলনা কারন সেখানে and logical Operator ব্যবহার করেছি এবং এর কারনে সেখানে কেবল তখনি ঢুকবে যখন দুটোই TRUE রিটার্ন করবে।

 

** and আর && অপারেটর একই শুধু পাথর্ক্য হচ্ছে && এর অগ্রগন্যতা (precedence) বেশি তদ্রুপ orআর || দুটোই একই অপারেটর তবে || এর অগ্রগন্যতা বেশি। অর্থ্যাৎ || এবং or দুটোই যদি কোন এক্সপেশনে থাকে তাহলে || এর এক্সিকিউশন আগে হবে।

 

এরুপ আরো পরীক্ষা করুন যেমন

//it works like (($x = TRUE) and FALSE). FALSE is ignored here and $x is assigned TRUE

$x = TRUE and FALSE;

//it works like ($y = (TRUE && FALSE)). Expression (TRUE && FALSE) is assigned to $y

$y = TRUE && FALSE;

//it works like (($z = TRUE) or FALSE). $z is assigned to TRUE and FALSE ignored

$z = TRUE or FALSE;

//it works like ($a = (TRUE || FALSE)). $a is assigned to the expression (TRUE || FALSE)

$a = TRUE || FALSE;

 এভাবে অন্যান্যনগুলি পরীক্ষা করে দেখতে পারেন।

 

অ্যারে অপারেটর

উদাহরন

অপারেটরের নাম

ব্যাখ্যা

$x + $y

Union

 $x এবং $y দুটি অ্যারে যোগ করা হয়েছে

$x == $y

Equality

TRUE হবে যদি $x এবং $y অ্যারে দুটির একই key/value থাকে

$x === $y

Identity

TRUE হবে যদি $x এবং $y অ্যারে দুটির key/value একই ক্রমানুসারে থাকে এবং তাদের type একই হয়।

$x != $y

Inequality

TRUE হবে যদি $x অ্যারেটি $y এর সমান না হয়

$x <> $y

Inequality

TRUE হবে যদি $x এবং $y সমান না হয়।

$x !== $y

Non-identity

TRUE হবে যদি $x এবং $y এর সবকিছু সমান না হয়। key/value, type ইত্যাদি সবসহ সমান না হলে

যেমন

<?php

$x = array(1 => "Dhaka", 2=> "Rangpur");

$y = array("two" => "Chittagong", 3 => "Sylhet", 4 => "Khulna");

echo '<pre>';

print_r($x + $y).'<br/>';

print_r($y + $x);

?>

output

Array
(
    [1] => Dhaka
    [2] => Rangpur
    [two] => Chittagong
    [3] => Sylhet
    [4] => Khulna
)
Array
(
    [two] => Chittagong
    [3] => Sylhet
    [4] => Khulna
    [1] => Dhaka
    [2] => Rangpur
)

** + দিয়ে বাম দিকের অ্যারের সাথে ডান দিকের array যোগ হয়ে যায়। তাই উদাহরনেও দেখুন আগে বামদিকের সব আসছে এরপর ডানদিকেরগুলি বসছে। (আরও বিস্তারিত দেখতে চাইলে var_dump($x+$y) দিয়ে দেখতে পারেন)

<?php

.$x = array(0 => "Dhaka", 1 => "Rangpur");

$y = array("Dhaka", "Rangpur");

var_dump($x == $y);  .?>

Output true আসবে কারন দুটি array রই key/value সমান। যদিও দ্বিতীয় array  টির key দেয়া নেই, php অটোমেটিকালি সেটা সেট করে নেয়। এই অ্যারে দুটি identical হবে কেননা এদের key/value এর type একই। var_dump($x === $y) দিয়ে দেখুন true আসবে।

** যেকোন একটা key কিংবা value তে পরিবর্তন করে দিন তাহলে আর identical হবেনা। যেমন

<?php

$x = array(0 => 6, 1 => "Rangpur");

$y = array(0 => "6", 1 => "Rangpur");

var_dump($x === $y);

?>

output false আসবে। তবে var_dump($x == $y) আবার true আসবে কারন দুটোরই key/value একই শুধু type আলাদা।

 

                                                            Page-5

ক্যালকুলেশনের সময় operator গুলির অগ্রগন্যতা সম্পর্কে স্বচ্ছ ধারনা থাকতে হয়। তানাহলে সঠিক output বলতে পারবেন না। যেমন 5+6*5 এর output কত? 35 হবে 55 হবেনা কারন আগে গুননের কাজ হবে এরপর যোগের কাজ হবে যেহেতু যোগ অপারেটররের চেয়ে (+) গুননের (*) অগ্রগন্যতা বেশি। এভাবে যে অপারেটরের অগ্রগন্যতা বেশি ক্যালকুলেশনের সময় সেটার কাজ করতে হবে আগে, সরল অংক হাইস্কুলে করেছিলেন না? ঐরকম। যাইহোক আপনি চাইলে প্রথম বন্ধনী ব্যবহার করে অগ্রগন্যতা রুখে দিয়ে প্রয়োজনীয়টির আগে অপারেশন করে নিতে পারেন যেমন 5+6*5 এর আউটপুট 55 পেতে চাইলে (5+6)*5 এভাবে দিয়ে করতে পারেন।

php ম্যানুয়ালে operator অগ্রগন্যতার একটা তালিকা আছে এখানে দেখুন সবচেয়ে উপরেরটির অগ্রগন্যতা সবচেয়ে বেশি এভাবে এক এক করে নিচে যাবে। এই তালিকাটি মনে রাখা খুব জরুরী, যেকোন পরীক্ষা দিতে গেলে বিশেষ করে ওডেস্ক বা জেন্ড সার্টিফিকেশন ইত্যাদিতে এগুলি থাকে।

 

increment/decrement অপারেটর

++$x

Pre-increment

 $x এক বাড়ে, এরপর $x রিটার্ন হবে

$x++

Post-increment

আগে $x রিটার্ন হবে, এরপর $x এক বাড়বে

--$x

Pre-decrement

 $x এক কমবে, এরপর $x রিটার্ন করবে

$x--

Post-decrement

আগে $x রিটার্ন করবে, এরপর $x এক করে কমবে

যেমন

<?php

$x = 2;

echo $x++.'<br/>';

echo $x; ?>

output

2
3

দেখুন $x++ করাতে এক বাড়ছে তবে echo $x++; এর আউটপুট 2 আসছে এবং এরপরের বার $x এর মান 3 আসছে। অর্থ্যাৎ পরে এক () বাড়ছে। এটার নাম হচ্ছে post-increment.

<?php

$x = 2;

echo ++$x.'<br/>';

echo $x;

?>

Output

3
3

এটাতে দেখুন প্রথমবারেই আউটপুট 3 আসছে। এটা হল pre-increment.

এভাবে pre/post decrement এর পরীক্ষা করে দেখতে পারেন।

টেনারি অপারেটর দিয়ে সংক্ষেপে if...else এর কাজ করা যায়। যেমন নিচে একটা সাধারন if..else এর উদাহরনটি দেখুন

<?php

$x = 2;

$y = 5;

if($x < $y){

echo '$x is small than $y';

}else{

echo '$x is small than $y';

}?>

এই কোডটুকুই টেনারি অপারেটর দিয়ে দেখাতে পারেন এভাবে

<?php

$x = 2;

$y = 5;

echo ($x < $y) ? '$x is small than $y' : '$x is small than $y';?>

if এর ভিতরের অংশটুকু দেয়ার পর প্রশ্নবোধক চিহ্ন এরপর কোডব্লক এবং এরপর কোলন (:) দিয়ে else এর মধ্যে যে কোডব্লক থাকে সেই কোড।

 

** অপারেটর সম্পর্কে বুঝতে যদি কোন সমস্যা হয়, তাহলে ফোরামে প্রশ্ন ছুড়ে দিতে ইতস্তত করবেন না।