PHP Variable পর্ব-২: PHP Variable Scope কি?

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

PHP Variable Scope কি?

PHP তে আপনি আপনার সমস্ত কোড জুড়ে যেকোনো জায়গায় Variable Declare বা ঘোষণা করতে পারেন। কোনো Variable যদি আপনি function এর ভিতরে ঘোষণা করেন, তাহলে ঐ Variable এর ব্যবহার Function এর মধ্যেই সীমাবদ্ধ রাখতে হবে। PHP তে এইটাকে বলা হয় Local Scope, আবার যদি কোনো Variable ফাঙ্কশনের বাহিরে ঘোষণা করেন। তাহলে ঐ Variable সমস্ত কোড জুড়ে ব্যবহার করতে পারবেন। তবে Funciton এর ভিতরে ব্যবহার করতে পারবেন না, যদি না সেই variable কে Global ঘোষণা না করেন।

PHP তে Variable Scope চার ধরনের :

  • local
  • global
  • Super Global
  • static

Zend Certified PHP Engineering (ZCPE) Course

Global এবং Local Scope

Global Scope

কোনো Variable কে যখন Function এর বাইরে ঘোষনা করা হয় তখন ঐ variable শুধু মাত্র Function এর বাহিরেই ব্যবহার করা যায়। function এর ভিতরে ব্যবহার করা যায়না। তখন এটাকে বলা হয় Global Scope, নিচের উদাহরণে দেখা যাক:

<?php
$x = 5; // global scope

function myFunc() {
    echo "Variable x inside function is: $x <br>";
} 
myFunc();

echo "Variable x outside function is: $x";
?>

ব্যাখ্যা : উপরের উদাহরণে function এর ভিতরের $x একটা Error Notice দেখাবে। কারন এখানে $x ভ্যারিয়েবল হচ্ছে Global Scope, যার জন্য $x কে function এর ভিতরে ব্যবহার করা যাবেনা। আবার function এর বাহিরে $x Variable কোনো Error দেখাবেনা। কারন Global Scope Variable আমরা function এর বাহিরে যেকোনো জায়গায় ব্যবহার করতে পারবো।

Local Scope

কোনো Variable কে যখন Function এর ভিতরে ঘোষনা করা হয় তখন ঐ variable শুধু মাত্র Function এর ভিতরেই ব্যবহার করা যায়। function এর বাহির থেকে ব্যবহার করা যায়না। তখন এটাকে বলা হয় লোকাল Scope, নিচের উদাহরণে দেখা যাক:

<?php
function myFun2() {
    $x = 5; // local scope
    echo "Variable x inside function is: $x<br>";
} 
myFunc2();

// using x outside the function will generate an error
echo "Variable x outside function is: $x<br>";
?>

ব্যাখ্যা : উপরের উদাহরণে function এর বাহিরের $x একটা Error Notice দেখাবে। কারন এখানে Function এর ভিতরের $x Variable হচ্ছে Local Scope, যার জন্য $x কে function এর বাহিরে ব্যবহার করা যাবেনা। আর $x Variable টি Local Scope হওয়াতে function এর ভিতরে কোনো Error দেখাবেনা।

Zend Certified PHP Engineering (ZCPE) Course

PHP তে Global Keyword কি?

PHP তে কোনো Global Variable কে function এর ভিতরে ব্যবহার করার জন্য global keyword ব্যবহার করা হয়। এটা করার জন্য function এর ভিতরে variable এর সামনে Global Keword লিখতে হবে। নিচের উদাহরণে দেখা যাক:

<?php
$x = 5;
$y = 10;

function myFunc3() {
    global $x, $y;
    $y = $x + $y;
}

myFunc3();
echo $y; // outputs 15
?>

ব্যাখ্যা : উপরের উদাহরণে function এর বাহিরের $x এবং $y Variable কে Function এর ভিতরে ব্যবহারের সুযোগের জন্য আমরা Global Keyword করি।

PHP তে Global Variable গুলো একটা array তে থাকার কারণে আমরা নিচের উদাহরণের মতো করেও Global Variable গুলোকে $GLOBALS super Global Variable দিয়ে ব্যবহার করতে পারি।

<?php
$x = 5;
$y = 10;

function myFunc3() {
    $GLOBALS['y'] = $GLOBALS['x'] + $GLOBALS['y'];
} 

myFunc3();
echo $y; // outputs 15
?>

Zend Certified PHP Engineering (ZCPE) Course

PHP ফাংশনে একটি super global variable কে কিভাবে রিসিভ করতে পারি?

একটি superglobal variable যেমন $_GET, $_POST, $_SERVER, $_SESSION, অথবা $_COOKIE দিয়ে একটি PHP ফাংশনের ভিতরে অ্যাক্সেস করতে, আপনি কেবল ফাংশনের মধ্যে তাদের গ্লোবাল নাম দ্বারা তাদের উল্লেখ করতে পারেন। PHP স্বয়ংক্রিয়ভাবে সুপারগ্লোবালগুলিকে ফাংশনের মধ্যে সহ যেকোনো scope এ available করে। এখানে আপনি কিভাবে একটি PHP ফাংশনে একটি সুপারগ্লোবাল ভেরিয়েবলের মান পেতে পারেন তার উদাহরণ দেওয়া হলো।

প্রথমে form.php নামে নিচের মতো করে একটি File তৈরি করুন:

<?php 
session_start();
$_SESSION['pageName']=$_SERVER['PHP_SELF'];
setcookie("clientIp",$_SERVER['REMOTE_ADDR'],time()+3600);
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Super Global Variable Practice</title>
</head>
<body>
    <form action="process.php" method="get">
        Name:<input name="name" type="text">
        <input type="submit" name="submit" value="Send">
    </form>
    <form action="process.php" method="post">
        Age:<input name="age" type="text">
        <input type="submit" name="submit" value="Send">
    </form>
</body>
</html>

এবার process.php ফাইলে নিম্নোক্ত উপায়ে Super Global Variable এর value গুলো গ্রহণ করুন :

<?php 
function myFunction() {

$date=getdate($_SERVER['REQUEST_TIME']);
    // Access the superglobal variable $_GET
  if(isset($_GET['name'])){
    echo "Welcome ".$_GET['name']."!<br>";
  }

    // Access the superglobal variable $_POST
   if(isset($_POST['age'])){
    echo "You're ".$_POST['age']." Years Old!<br>";
   }

   session_start();
   echo "Coming From Page: ".$_SESSION['pageName'],"<br>";
   echo "Client Ip is: ".$_COOKIE['clientIp'],"<br>";


echo "<br> You access This page at $date[weekday], $date[month] $date[mday], $date[year]";
 
}

// Call the function to demonstrate
myFunction();

Result:

Welcome Masud Alam with GET Method!
Coming From Page: /test/form.php
Client Ip is: ::1

You access This page at Tuesday, September 19, 2023

You're 39 Years Old with POST Method!
Coming From Page: /test/form.php
Client Ip is: ::1

You access This page at Tuesday, September 19, 2023

PHP তে Static Keyword কি?

static keyword

সাধারণত PHP তে কোনো Function execute হওয়ার পর বা Function এর কাজ শেষ হওয়ার সাথে সাথে তার Local Variable গুলোও মুছে যায়। কিন্তু কখনো কখনো আমরা চাই পরবর্তীতে ব্যবহারের জন্য আমাদের Local Variable গুলো থাকুক। আর এই কাজটি করার জন্য আমাদের কে static keyword ব্যবহার করতে হয়। চলুন static keyword ছাড়া একটা উদাহরণ দেখি:

<?php
function myFunc4() {
    $x = 0;
    echo $x;
    $x++;
}
myFunc4(); //Output: 0
myFunc4(); //Output:  0
myFunc4(); //Output:  0
?>

উপরের উদাহরণে লক্ষ্য করুন “myFunc4” function টি যতবারই call করতেছি ততবারই ফলাফল হিসাবে 1 আসতেছে। এর কারণ myFunc4 function টি প্রত্যেকবারই তার variable গুলো ডিলিট করে দেয় এবং প্রত্যেকবারই নতুন value assign করে। যার জন্য ফলাফল হিসাবে আমরা প্রত্যেকবার 1 পাচ্ছি। অথচ আমরা যদি চাই আগের মানের সাথে প্রত্যেকবার 1 করে যোগ হোক, তাহলে আপনি $x variable এর সামনে static keyword জুড়ে দিতে হবে। চলুন নিচের উদাহরণে দেখা যাক।

<?php
function myFunc4() {
   static $x = 0;
    echo $x;
    $x++;
}
myFunc4(); //Output: 1
myFunc4(); //Output: 2
myFunc4(); //Output: 3
?>

নিম্নে static variable এর আরো জটিল একটা উদাহরণ দেওয়া হলো :

ধরুন আপনি আপনার সার্ভারের log Message গুলোকে নিম্নোক্ত উপায়ে একটা array তে রাখতে চান, এবং সর্বশেষ ফাঙ্কশন কলিং এর সময় সব গুলো error message পেতে চান , সেক্ষেত্রে আপনাকে error message গুলোর array variable কে আপনাকে static ঘোষণা করতে হবে। অন্যথায় পূর্ববর্তী সব error message হারিয়ে যাবে।

প্রথমে দেখে নেওয়া যাক , static ঘোষণা ছাড়া কি ধরনের রেজাল্ট আসত।

//Error Logging function without static declaration
<?php
function logger($message) {
    $log = []; // Initialize a static array to store log messages
    
    // Add the message to the log array
    $log[] = $message;
    
    // Output the entire log
    echo "Log Messages:\n";
    foreach ($log as $index => $entry) {
        echo "$index: $entry\n";
    }
    echo "\n";
}

logger("Error: File not found."); // Log the first message
logger("Warning: Invalid input."); // Log another message
logger("Info: Operation completed successfully."); // Log one more message

Result:

Log Messages:
0: Error: File not found.

Log Messages:
0: Warning: Invalid input.

Log Messages:
0: Info: Operation completed successfully.

ব্যাখ্যা: এখানে লক্ষ্য করুন logger() ফাঙ্কশনে $log variable টি static ঘোষণা না করায় , logger() ফাঙ্কশন প্রত্যেকবার কলিং এর সময় তার পূর্ববর্তী লগ মেসেজ হারিয়ে ফেলতেছে।

এবার দেখে নেওয়া যাক , static ঘোষণা করলে কি ধরনের রেজাল্ট আসত।

<?php
function logger($message) {
    static $log = []; // Initialize a static array to store log messages
    
    // Add the message to the log array
    $log[] = $message;
    
    // Output the entire log
    echo "Log Messages:\n";
    foreach ($log as $index => $entry) {
        echo "$index: $entry\n";
    }
    echo "\n";
}

logger("Error: File not found."); // Log the first message
logger("Warning: Invalid input."); // Log another message
logger("Info: Operation completed successfully."); // Log one more message

Result:

Log Messages:
0: Error: File not found.

Log Messages:
0: Error: File not found.
1: Warning: Invalid input.

Log Messages:
0: Error: File not found.
1: Warning: Invalid input.
2: Info: Operation completed successfully.

ব্যাখ্যা: এখানে লক্ষ্য করুন logger() ফাঙ্কশনে $log variable টি static ঘোষণা করায় , logger() ফাঙ্কশন প্রত্যেকবার কলিং এর সময় তার পূর্ববর্তী লগ মেসেজ সহ রিটার্ন করতেছি ।

আমি মাসুদ আলম, বাংলাদেশের ৩৬ তম Zend Certified Engineer । ২০০৯ সালে কম্পিউটার সাইন্স থেকে বেচেলর ডিগ্রী অর্জন করি। দীর্ঘ ১৫ বছর আমি Winux Soft, SSL Wireless, IBCS-PRIMAX, Max Group, Canadian International Development Agency (CIDA), Care Bangladesh, World Vision, Hellen Keller, Amarbebsha Ltd সহ বিভিন্ন দেশি বিদেশী কোম্পানিতে ডেটা সাইন্স, মেশিন লার্নিং, বিগ ডেটা, ওয়েব ডেভেলপমেন্ট এবং সফটওয়্যার ডেভেলপমেন্ট এর উপর বিভিন্ন লিডিং পজিশন এ চাকরি এবং প্রজেক্ট লিড করি। এছাড়াও বাংলাদেশের ১৮৫ জন জেন্ড সার্টিফাইড ইঞ্জিনিয়ার এর মধ্যে ১২০ এরও অধিক ছাত্র আমার হাতে জেন্ড সার্টিফাইড ইঞ্জিনিয়ার হয়েছেন। বর্তমানে w3programmers ট্রেনিং ইনস্টিটিউট এ PHP এর উপর Professional এবং Advance Zend Certified PHP -8.2 Engineering, Laravel Mastering Course with ReactJS, Python Beginning To Advance with Blockchain, Machine Learning and Data Science, Professional WordPress Plugin Development Beginning to Advance কোর্স করাই। আর অবসর সময়ে w3programmers.com এ ওয়েব টেকনোলজি নিয়ে লেখালেখি করি।

2 thoughts on “PHP Variable পর্ব-২: PHP Variable Scope কি?

Leave a Reply