PHP Professional,Laravel 5.6 Beginning to Advance এবং Zend Certified PHP Engineer (ZCPE ) Course এ সীমিত সংখ্যক আসন বাকি আছে। আগ্রহীদেরকে অতিসত্বর মাসুদ আলম স্যার এর সাথে যোগাযোগ করার জন্য অনুরোধ করা যাচ্ছে। স্যার এর মোবাইল নম্বর : ০১৭২২ ৮১ ৭৫ ৯১

PHP Variable পর্ব-৪: Reference Variable

এই পর্বে আপনি জানতে পারবেন :

Reference Variable

PHP Reference Variable কি ?

PHP Reference Variable হচ্ছে কোনো একটা নির্দিষ্ট variable এর value বা content এ ভিন্ন ভিন্ন Variable নামে ব্যবহার করতে পারা। অনেকটা Windows OS এর Shortcut Links অথবা Linux OS এর Symbolic Links এর মতো। PHP তে Reference ঘোষণা করতে হলে , Variable এর সামনে একটা & চিহ্ন (ampersand sign) দিতে হয়।

PHP তে Reference Variable দিয়ে আমরা কি করতে পারি?

PHP তে Reference ব্যবহার করে আমরা তিনটি মৌলিক কাজ করতে পারি

  • Assigning by Reference বা একই content বা value তে দুইটি variable কে assign বা নির্ধারিত করা
  • Passing by Reference বা Reference দিয়ে কোনো Variable কে function এ পাঠানো
  • Returning References বা function থেকে Reference Return করা।

Assigning by Reference কি?

PHP তে যখন একই content বা value এর জন্য দুইটি variable কে assign বা নির্ধারিত করা হয় , PHP এর পরিভাষায় একে বলা হয় Assigning by Reference. নিচের উদাহরণ থেকে আরেকটু ভালো ভাবে বুঝে নেয়া যাক

<?php
$a = "Hi there";
$b = $a;
$b = "See you later";
echo $a; // Displays "Hi there"
echo $b; // Displays "See you later"
?>

ব্যাখ্যা: উপরের কোডে $a varible কে $b তে assign বা নির্দিষ্ট করার পর ও $a এবং $b দুইটি সম্পূর্ণ স্বাধীন দুইটি ভ্যারিয়েবল। এবং দুইটি ভ্যারিয়েবলের Output বা ফলাফল সম্পূর্ণ ভিন্ন। $b ভ্যারিয়েবল তার সর্বশেষ Value “See you later” ই ফলাফল হিসাবে দেখাচ্ছে। $a variable এর value হিসাবে “Hi There” দেখাচ্ছেনা। এখন আমরা যদি $a variable কে $b এর সাথে reference করে দেই, তাহলে $a এবং $b দুটি variable ই সবসময় একই value ধারণ করবে।
চলুন নিচের উদাহরণ থেকে বুঝে নেয়া যাক :

<?php
$a = "Hi there";
$b = &$a;
$b = "See you later";
echo $a; // Displays "See you later"
echo $b; // Displays "See you later"
?>

ব্যাখ্যা:শুধু মাত্র reference এর কারণে আমরা দুইটা Variable এর Value সব সময় একই পাবো। আবার $a এর Value যদি পরিবর্তন করেন , তাহলে $b এর value ও পরিবর্তন হয়ে যাবে। নিচের উদাহরণ লক্ষ্য করুন :


<?php
$a = "Hi there";
$b = &$a;
$b = "See you later";
$a="GoodBye!";
echo $a; // Displays "GoodBye!"
echo $b; // Displays "GoodBye!"

Passing by Reference কি?

PHP তে Reference দিয়ে যখন কোনো Variable কে function এ পাঠানো হয়। তখন তাকে বলা হয় Passing By Reference. আর এই কাজটি করতে হলে আপনাকে PHP তে Function Define করার সময় Parameter এর আগে একটা & চিহ্ন (ampersand sign) দিতে হয়। আর এতে সুবিধা হচ্ছে function এর ভিতরে Parameter এর Value পরিবর্তন হওয়ার সাথে সাথে আপনার পাঠানো Variable টির Value ও পরিবর্তন হয়ে যাবে । নিচের উদাহরণ থেকে দেখা যাক।

function goodbye( &$greeting ) {
  $greeting = "See you later";
}
 
$myVar = "Hi there";
goodbye( $myVar );
echo $myVar; // Displays "See you later"

ব্যাখ্যা:লক্ষ্য করুন Function এর ভিতরের Parameter $greeting এর Value “See you Later” হওয়াতে Function এর বাহিরের Variable $myVar এর Value “Hi there” এর পরিবর্তে “See you later ” হয়ে গেছে।

আরো একটা উদাহরণ দেখি :

<?php
function foo(&$var)
{
    $var++;
}

$a=5;
foo($a);
echo  $a; // $a is 6 here
?>

ব্যাখ্যা:এখানেও একইভাবে Function এর ভিতরের Parameter $varএর Value Increment হওয়াতে Function এর বাহিরের Variable $aএর Value 5 এর পরিবর্তে 6 হয়ে গেছে।

Returning References কি?

PHP তে Reference সহ যখন কোনো Variable কে function থেকে return বা প্রত্যাবর্তন করা হয় । তখন তাকে বলা হয় Returning By Reference. আর এই কাজটি করতে হলে আপনাকে PHP তে function এর নামের আগে একটা & চিহ্ন (ampersand sign) দিতে হবে। সেই সাথে আপনি যখন কোনো variable এ function call করবেন, তখনও (=) চিহ্ন (equal sign) এর সাথে একটা & চিহ্ন (ampersand sign) দিতে হবে। আর এতে সুবিধা হচ্ছে আপনি যেই variable এর মধ্যে function টি call করলেন , সেই variable এর value পরিবর্তন হলে function এর return value ও পরিবর্তন হয়ে যাবে। । নিচের উদাহরণ থেকে দেখা যাক।

<?php
$a = 10;
 
function &test() {
  global $a;
  return $a;
}
 
$b =&test();
$b--;
echo "\$a = $a<br>";  // Displays "9"
echo "\$b = $b<br>";  // Displays "9"
?>

ব্যাখ্যা:লক্ষ্য করুন এখানে $b এর মান পরিবর্তন হওয়ার সাথে সাথে $a এর মান ও পরিবর্তন হয়ে গেছে। আর এটা সম্ভব হয়েছে Returning by Reference এর কারণে।

PHP তে Reference দিয়ে কি array অথবা object এ কাজ করা যায়?

হাঁ PHP তে Reference দিয়ে array অথবা object এর property গুলোর value খুব সহজে পরিবর্তন করে দেয়া যায়। সেক্ষেত্রে আপনাকে foreach loop এর আশ্রয় নিতে হবে। নিচের উদাহরণ দুইটি লক্ষ্য করুন :

$bands = array( "The Who", "The Beatles", "The Rolling Stones" );
 
foreach ( $bands as $band ) {
  $band = strtoupper( $band );
}
 
echo "<pre>";
print_r( $bands );
echo "</pre>";

উপরের উদাহরণের ফলাফল নিচের মত করে দেখাবে :

Array
(
    [0] => The Who
    [1] => The Beatles
    [2] => The Rolling Stones
)

এখানে আমরা দেখতে পাচ্ছি strtoupper function টি আমাদের কোনো কাজে আসতেছেনা, এখন আমরা যদি $bands array কে $band এর সাথে reference করে দেই, তাহলে $bands array এর সব গুলো value ই uppercase এ রূপান্তর হয়ে যাবে। নিচের উদাহরণ লক্ষ্য করুন :

$bands = array( "The Who", "The Beatles", "The Rolling Stones" );
 
foreach ( $bands as &$band ) {
  $band = strtoupper( $band );
}
 
echo "<pre>";
print_r( $bands );
echo "</pre>";

নিচে পরিবর্তন লক্ষ্য করুন, সবগুলো Array Property এর value Uppercase এ পরিবর্তন হয়েগেছে।

Array
(
    [0] => THE WHO
    [1] => THE BEATLES
    [2] => THE ROLLING STONES
)

এই ক্যাটাগরির অন্যান্য পোস্ট:

Masud Alam
আমি মাসুদ আলম, বাংলাদেশের ৩৬ তম Zend Certified Engineer । ২০০৯ সালে কম্পিউটার সাইন্স থেকে বেচেলর ডিগ্রী অর্জন করি। দীর্ঘ ৮ বছর আমি Winux Soft, SSL Wireless, IBCS-PRIMAX, Max Group, Canadian International Development Agency (CIDA), Care Bangladesh, World Vision, Hellen Keller সহ বিভিন্ন দেশি বিদেশী কোম্পানিতে ওয়েব ডেভেলপমেন্ট এবং সফটওয়্যার ডেভেলপমেন্ট এর উপর বিভিন্ন লিডিং পজিশন এ চাকরি এবং প্রজেক্ট লিড করি। বিশেষ ভাবে বাংলাদেশের ১০০ জন জেন্ড সার্টিফাইড ইঞ্জিনিয়ার এর মধ্যে ৫২ জন ই আমার হাতে জেন্ড সার্টিফাইড হয়েছে। বর্তমানে TechBeeo Software Company তে সিইও হিসাবে আছি । পাশাপাশি w3programmers ট্রেনিং ইনস্টিটিউট এ PHP এর উপর Professional এবং Advance Zend Certified PHP -7 Engineering কোর্স করাই। আর w3programmers.com সাইট টি আমার।

Leave a Reply

Your email address will not be published. Required fields are marked *