Assignment বা আরোপন অপারেটর

Assignment operator মুলত সমান (=) চিহ্ন। এর সাথে যুক্ত হয়ে আরো কিছু এসাইনমেন্ট অপারেটর আছে সেগুলিকে বলে Combined Operator বা সংযুক্ত অপারেটর। নিচের সবগুলির উদাহরন দেয়া হল

<?php

// 15 assigned to $x (assignment operator)

$x = 15;

// combined operator +=

$x += 15; /* this means $x = $x + 15*/

echo $x .'<br/>';

//combined operator .=

$y = 'Spfoundationbd';

$y .= ' Tutorials'; /* this means $y = $y . ' Tutorials'*/

echo $y;

?>

আউটপুট

30
Spfoundationbd Tutorials

$x = 15 এটার অর্থ $x এর মান ১৫ এসাইন তথা আরোপ করা হল। অথবা এভাবে বলতে পারেন যে বামদিকের operand ডানদিকের এক্সপেশন থেকে মান নিয়ে সেটা এসাইন করা হয়েছে।

এবার $x += 15; দেয়াতে সেটার আউটপুট দেখুন ৩০ এসেছে এবং $y .= ' Tutorials'; দেয়াতে আউটপুট Spfoundationbd Tutorials এভাবে এসেছে। এখানে += এবং .= Operator দেয়াতে মুল ভেরিয়েবলটির মান পরেরটিতে ঢুকে গেছে। এটাকে টেকনিকাল ভাষায় বলা হয় assignment by value (মান দিয়ে আরোপন)

 

assignment by reference বা রেফারেন্স দিয়ে আরোপন

php তে & চিহ্ন ব্যবহার করে দুটি ভেরিয়েবলে একই মান এসাইন করা যায়। যেমন

<?php

// assignment by reference

$x = 15;

$y = &$x;

echo $x.'<br/>';

echo $y;

?>

Output

15
15

assignment by value কারনে মুল ভেরিয়েবলের মান পরেরটিতে কপি হয়ে যায় কিন্তু assignment by reference করলে সেটা হয়না। এখন $x এর মান পরিবর্তন করলে $y এর মানও পরিবর্তন হয়ে যাবে। যেমন

<?php

// assignment by reference

$x = 15;

$y = &$x;

$x = 5;

echo $x.'<br/>';

echo $y;

?>

Output

5
5

দেখুন $y পরিবর্তন হয়ে গেছে কারন $y হচ্ছে $x এর রেফারেন্স।

 

Bitwise (বিটওয়াইজ) Operator: এই Operator একটা সংখ্যার বিট নিয়ে কাজ করে। বিট বা bit হচ্ছে 0 অথবা 1 এদুটি বাইনারি ডিজিট (দ্বিমিক সংখ্যা) এর একটি। সাধারনত আমরা যে সংখ্যা পদ্ধতি নিয়ে কাজ করে থাকি তাহল দশ ভিত্তিক সংখ্যা। এরুপ আছে দুইভিত্তিক সংখ্যা পদ্ধতি। দ্বিমিক সংখ্যা পদ্ধতিতে শুধু অথবা নিয়েই যেকোন সংখ্যা গঠিত হয় যেমন ৬৫ (দশভিত্তিক) এর দ্বিমিক সংখ্যা হল ০১০০০০০১ অর্থ্যাৎ (৬৫)১০ = (০১০০০০০১) 

বিট নিয়ে এক বাইট তৈরী। বাইটের সর্বোচ্চ মান হতে পারে ২৫৫ যদি প্রত্যেকটি বিটের মান থাকে (মান থাকতে হবে এই্ কথার অর্থ হচ্ছে মান হবে, হলে এর অর্থ হবে নেই)

বাইট ( বিট )

 

১২৮

৬৪

৩২

১৬

 

 

 

=

২৫৫

 ১২৮ থেকে পর্যন্ত সব যোগ করুন তাহলে ২৫৫ হবে। যদি এর মধ্যে কোথাও থাকে তাহলে বরাবর উপরের সংখ্যাটি বাদ যাবে এবং ২৫৫ হবেনা। এভাবে যেকোন একটা সংখ্যা যেমন ১২৫ এর বাইনারি সংখ্যা যেটা হবে সেটা এই টেবিলে বসান

বাইট ( বিট )

 

১২৮

৬৪

৩২

১৬

 

 

 

=

১২৫

অর্থ্যাৎ ৬৪ + ৩২ + ১৬ + + + = ১২৫

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

উদাহরন

অপারেটর নাম

ফল

$x & $y

And

বিটগুলি যেটা $x এবং $y দুটোর মধ্যেই (সেট করা) আছে

$x | $x

Or (inclusive or)

বিটগুলি যা হয় $x অথবা $y  (সেট করা) আছে

$x ^ $y

Xor (exclusive or)

বিটগুলি যেগুলি হয় $x অথবা $y  আছে কিন্তু দুটোর মধ্যেই নেই (কমন নেই)

~ $x

Not

বিটগুলি যেগুলি  $x  সেট করা নেই

$x << $y

Shift left

$x কে $y সংখ্যকবার দিয়ে গুন করবে

$x >> $y

Shift right

$x কে  $y সংখ্যকবার দিয়ে ভাগ করবে

And অপারেটর

<?php

$x = 15;

$y = 3;

echo $x & $y;

?>

Output 3 আসবে।

ব্যাখ্যা: ১৫ এবং এর বাইনারি সংখ্যাকে টেবিলটিতে বসিয়ে দিন

বাইট ( বিট )

 

১২৮

৬৪

৩২

১৬

 

 

 

=

১৫

 

=

এখন table a  দেখুন ১৫ এবং এর মধ্যে কোন্ কোন্ বিটগুলি কমন আছে তথা দুটোতেই আছে। ১ম এবং ২য় বিট তাইনা? অর্থ্যাৎ মান হবে + =

Or Operator

1.<?php

2.$x = 15;

3.$y = 3;

4.echo $x | $y;

5.?>

 Output  15 আসবে।

ব্যাখ্যা: ১৫ কিংবা যেটারই বিট থাকুন না কেন সেই বিট নিতে হবে এবং যোগ করে যেটা আসবে সেটাই ফলাফল। যেহেতু ১ম, ২য়, ৩য় এবং ৪র্থ অবস্থানে যেকোন একটি সংখ্যার হলেও বিট সেট আছে (অর্থ্যাৎ আছে) তাই +++ = ১৫ আউটপুট আসছে।

 

বাইট ( বিট )

 

১২৮

৬৪

৩২

১৬

 

 

 

=

১৫

 

=

 

Xor বা এক্সক্লুসিভ or Operator

উপরের ডেটা দিয়েই যদি Xor করেন তাহলে আউটপুট ১২ আসবে।

<?php

$x = 15;

$y = 3;

echo  $x ^ $y;

?>

Output

12

উপরের টেবিলটিতেই দেখে নিন, একই টেবিল তাই আর দিলামনা। Xor অপারেটর (যেটা ^ এই চিহ্ন ব্যবহার করে লেখা হয়) দিয়ে বিটগুলির যোগফল নেয়া হয় যেগুলি দুটোতেই কমন নেই বা দুটো সংখ্যাই যে বিটগুলি শেয়ার করেছে সেগুলি বাদে বাকিগুলি। যেমন উপরের টেবিলে দেখুন যেহেতু এবং বিটে ১৫ এবং দুটো সংখ্যারই শেয়ার আছে (অর্থ্যাৎ আছে) তাই সেদুটি বাদ দিয়ে বাকিগুলির যোগফল নেয়া হয়েছে। অর্থ্যাৎ + = ১২

~ বা Not অপারেটর

 এই অপারেটর বাদ দেয়ার জন্য ব্যবহৃত হয়। যেমন

<?php

$x = 15;

$y = 17;

echo  ~$x & $y;

?>

Output 16 আসবে।

ব্যাখ্যা: সংখ্যাদুটি টেবিলে বসিয়ে দেখা যাক

বাইট ( বিট )

 

১২৮

৬৪

৩২

১৬

 

 

 

=

১৫

 

=

১৭

~$x & $y এর অর্থ হল বিটগুলি নেবে যেগুলি $x নেই কিন্তু $y আছে। সুতরাং ~$x মানে $x বাদ দাও। তাহলে এখন দেখবে $y কোন কোন বিটে আছে। এবং ১৬ বিটে আছে তবে নিবেনা কারন সেটা $x আছে, তাই নিবে শুধু ১৬। অতএব Output ১৬ আসছে।

এবার যদি $y বাদ দিতে চাই তাহলে

<?php

$x = 15;

$y = 17;

echo  $x & ~$y;

?>

আউটপুট

14

একই জিনিস, ~$x & $y টেবিল থেকেই দেখে বোঝা যাচ্ছে, আরো কি ব্যাখ্যার দরকার আছে?

 

বামে শিফট বা shift left অপারেটর

<< চিহ্ন দিয়ে Operator টি লেখা হয়। যেমন

<?php

$x = 15;

$y = 2;

echo  $x << $y;

?>

Output 60 আসবে।

ব্যাখ্যা: $x << $y এর মানে হচ্ছে $x কে দিয়ে $y সংখ্যকবার গুন করে যেটা আসবে সেটাই। এখানে $x হচ্ছে ১৫ এবং তাকে $y সংখ্যকবার তথা বার গুন করলে ৬০ হয় তাই আউটপুট ৬০ এসেছে।

 

ডানে শিফট বা shift right অপারেটর

<?php

$x = 15;

$y = 2;

echo  $x >> $y;

?>

আউটপুট 3 আসবে।

ব্যাখ্যা: $x > $y এর অর্থ হল $x কে ২দিয়ে ভাগ কর $y সংখ্যকবার। এটাই্ ডানে শিফট হল। এখানে একটা নিয়ম মনে রাখতে হবে যে ভাগ করে যে ফল আসবে সেখানে যদি দশমিক আসে তাহলে পূর্ন সংখ্যাটি নিবে অর্থ্যাৎ দশিমকের পরের কোন কিছু নিবেনা। তাই উপরের উদাহরনে দেখুন ১৫ কে দিয়ে বার ভাগ করলে . আসলেও আউটপুট আসছে।

** $y এর মান যদি এত বেশি দেন যে $x কে আর ভাগ করা যাবেনা তাহলে ফল শুন্য আসবে। উপরের উদাহরনে $y=10 দিয়ে দেখুন।

তুলনামূলক/Comparison অপারেটর ব্যবহৃত হয়। নিচের Comparison অপারেটরের তালিকা দেয়া হল:

উদাহরন

অপারেটর নাম

বর্ননা

$x == $y

Equal

TRUE হবে যদি $x এবং $y টাইপ জাগলিং এর পর সমান হয়

$x === $y

Identical

TRUE হবে যদি $x এবং $y সমান হয়এবং তাদের টাইপ একই হয় যেমন দুটোই স্ট্রিং বা পূর্নসংখ্যা হলে

$x != $y

Not equal

TRUE হবে $x এর সমান $y না হয় টাইপ জাগলিং এর পর

$x <> $y

Not equal

TRUE হবে $x এর সমান $y না হয় টাইপ জাগলিং এর পর

$x !== $y

Not identical

TRUE হবে $x এর সমান $y না হয়, অথবা তাদের টাইপ একই না হয়। যেমন একটা স্ট্রিং এবং আরেকটা পূর্নসংখ্যা

$x < $y

Less than

TRUE হবে যদি $x ছোট হয় $y এর চেয়ে

$x > $y

Greater than

TRUE হবে $x বড় হয়  $y এর চেয়ে

$x <= $y

Less than or equal to

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

$x >= $y

Greater than or equal to

TRUE হবে $x বড় অথবা সমান হয় $y এর

Type জাগলিং: টাইপ জাগলিং একটি technical শব্দ এটার আসল অর্থ হল অটোমেটিক টাইপ রুপান্তর করন। পিএইচপিতে টাইপ ডিক্লেয়ার করতে হয়না বরং পিএইচপির ইন্জিন ডেটা দেখেই বুঝে নেয় এটা কোন টাইপের data, পূর্নসংখ্যা নাকি স্ট্রিং না ফ্লোটিং নাকি অন্যকিছু। এই অটোমেটিক টাইপ রুপান্তরকে type জাগলিং বলে।

$x = 15;

$y = 3;

if($x == $y){

echo '$x and $y are equal';

}else{

echo '$x and $y are not equal';

}

Output

$x and $y are not equal

এটার ব্যাখ্যা কি দেব, দেখেই তো বোঝা যাচ্ছে। $x == $y নয় অর্থ্যাৎ মান দুটি সমান নয় তাই TRUE রিটার্ন করেনি। ফলে else ব্লকে ঢুকেছে এবং সেখানকার code এক্সিকিউট হয়েছে।

বাকি সবগুলির উদাহরন একসাথে

$x = 15;

$y = 3;

var_dump($x === $y);

var_dump($x != $y);

var_dump($x <> $y);

আউটপুপ

bool(false) bool(true) bool(true)

যেহেতু $x আর $y সমান নয় তাই পরের var_dump() দুটি true রিটার্ন করেছে।

এবার বলতে পারবেন? নিচেরগুলি কি রিটার্ন করবে?

$x = 15;

$y = 3;

var_dump($x <  $y);

var_dump($x > $y);

var_dump($x <= $y);

var_dump($x >= $y);

আউটপুট

bool(false) bool(true) bool(false) bool(true)

** var_dump($x >= $y); এটার Output true আসছে কারন সমান না হলেও $x বড় $y এর চেয়ে আর var_dump($x <= $y); রিটার্ন করেছে false কেননা $x না ছোট না সমান $y এর।

সংক্ষেপে এভাবে উদাহরন দিলাম। আপনি চাইলে প্রথম উদাহরনের মত if() এর ভিতর এসব দিয়ে কোডব্লক চালিয়ে দেখতে পারেন।

 

** string আর সংখ্যার তুলনা করলে string কে php  সংখ্যায় রুপান্তর করে তারপর তুলনা করে, এছাড়া php ম্যানুয়ালে আরো কিছু নিয়ম আছে যেগুলিতে বিবরন আছে যে কোন্ কোন্ জিনিসকে php তুলনা করার আগে রুপান্তর করে,

তাই নিচেরগুলি দেখুন সব true রিটার্ন করবে।

<?php

var_dump(0 == 'test');

var_dump('1' == '01');

var_dump('100' == '1e2');

 

?>