PHP: Variables in PHP

:triangular_flag_on_post::triangular_flag_on_post: Variables in PHP :triangular_flag_on_post::triangular_flag_on_post:

:point_right: Variable / ভ্যারিয়েবল এর বাংলা প্রতিশব্দ হচ্ছে চলক। যেকোনো প্রোগ্রামিং ভাষার মৌলিক (Fundamental) এবং সবচেয়ে গুরুত্বপূর্ণ বিষয়গুলোর মধ্যে একটি হচ্ছে ভ্যারিয়েবল (variable)

:point_right: Variable বা চলক হচ্ছে এক ধরনের Container বা ধারক যা কোনো ভ্যালু / মান অথবা ডেটা (Data) ধারণ করে। অর্থাৎ ডেটা ধারণ করার একটি মাধ্যমে হচ্ছে ভ্যারিয়েবল। ভ্যারিয়েবল এ ধারনকৃত মান যেকোনো সময় পরিবর্তন করা যায়। অর্থাৎ এটি অস্থায়ী মান ধারণ করে থাকে। মান পরিবর্তন করা যায় বলেই এর নাম ভ্যারিয়েবল (Variable), অর্থাৎ যার মান ভ্যারি (Vary) করে বা পরিবর্তন হয়।

:point_right: সাধারণত মেমোরি (Memory) তে অস্থায়ীভাবে তথ্য সংরক্ষণ করার জন্য ভ্যারিয়েবল (variable) ব্যবহৃত হয়। ভ্যারিয়েবল এর মধ্যে যেকোনো ভ্যালু (Value) বা মান অ্যাসাইন করা যায়, যা পরিবর্তনশীল। এই অ্যাসাইনকৃত মান মেমোরি (Memory) তে অস্থায়ীভাবে জমা রাখার জন্য ভ্যারিয়েবল একটি জায়গা বরাদ্দ করে রাখে। একটি ভ্যারিয়েবল মেমোরি তে একটি নির্দিষ্ট জায়গা বরাদ্দ করে রাখে। যেকোনো ভ্যারিয়েবল এর মধ্যে ভ্যালু অ্যাসাইন করা হলে বা ভ্যালু পরিবর্তন করে নতুন কোনো ভ্যালু আসাইন করা হলে সেই ভ্যালু ভ্যারিয়েবল কর্তৃক মেমোরিতে বরাদ্দকৃত নির্দিষ্ট জায়গাতেই সংরক্ষিত থাকবে।

Example:

<?php
$name = "Zulfikar";
$age = 30;
?>


এখানে, $name এবং $age হচ্ছে ভ্যারিয়েবল এর নাম। Zulfikar এবং 30 হচ্ছে 
ভ্যারিয়েবল এ অ্যাসাইনকৃত মান বা ডেটা।

✅ PHP তে ভ্যারিয়েবল / চলক ঘোষণার নিয়ম

:small_blue_diamond: ভ্যারিয়েবল $ চিহ্ন দিয়ে শুরু করতে হবে। $ চিহ্নের পর ভ্যারিয়েবল এর যেকোনো নাম দিতে হবে। যেমনঃ $name, $age, $first_number

:small_blue_diamond: ভ্যারিয়েবলের নাম সংক্ষিপ্ত হতে পারে আবার পূর্ণ অর্থ প্রকাশ পায় এরকমও হতে পারে।
যেমনঃ $x, $y, $f_name, $num1, $firstName, $last_name, $password, $userName , $total Amount

:small_blue_diamond: ভ্যারিয়েবল এর নাম অক্ষর / বর্ণ অথবা Underscore _ চিহ্ন দ্বারা শুরু করতে হবে। কোনো সংখ্যা দিয়ে ভ্যারিয়েবলের নাম শুরু করা যাবে না।

:small_blue_diamond: ভ্যারিয়েবল এর নামের মধ্যে শুধুমাত্র A - Z অথবা a - z পর্যন্ত বর্ণ, 0 - 9 পর্যন্ত ডিজিট এবং বিশেষ চিহ্ন _ আন্ডারস্কোর ব্যবহার করা যাবে। এগুলো ছাড়া অন্য কোনো অক্ষর বা চিহ্ন ব্যবহার করা যাবে না।

:small_blue_diamond: ভ্যারিয়েবলের নামে একাধিক শব্দ থাকলে মাঝখানে কোনো ফাঁকা স্পেস ব্যবহার করা যাবে না।

Example:

<?php
$clientName = "John";  // ✔️ valid variable
$first_name = "John"; // ✔️ valid variable
$_color = "red";     // ✔️ valid variable
$number1 = 20;     // ✔️ valid variable


first_name = "John";  //❌ invalid variable (Starts without $ symbol)
$1st_number = 30; //❌ invalid variable (Starts with digit)
$client name = "Zulfikar"; //❌ invalid variable (Space between words)
$last-name = "Ali"; //❌ invalid variable (Unidentified symbol)
$age#1 = 50;  //❌ invalid variable (Unidentified symbol)
?>

:small_blue_diamond: PHP তে ভ্যারিয়েবলের নাম কেস-সেনসিটিভ (Case-Sensitive)। অর্থাৎ বড় হাতের অক্ষর এবং ছোট হাতের অক্ষর ভিন্ন অর্থ বহন করে।
যেমনঃ $age এবং $AGE দুটি ভিন্ন ভ্যারিয়েবল। আবার $name এবং $Name দুটি ভিন্ন ভ্যারিয়েবল।

:small_blue_diamond: PHP কীওয়ার্ড বা PHP তে ব্যবহৃত কোন সংরক্ষিত শব্দ ভ্যারিয়েবল হিসেবে ব্যবহার করা যাবে না। যেমনঃ function, class, echo ইত্যাদি শব্দ ভ্যারিয়েবলের নাম হিসেবে ব্যবহার করা যাবে না।

✅ ভ্যারিয়েবল এর নাম লিখার পদ্ধতি

👉 PHP তে ভ্যারিয়েবলের নাম বেশ কয়েকভাবেই লিখা যায়। তবে একটি প্রজেক্টে একটি স্টাইল অনুসরণ করে লিখাই ভালো।
$firstname    // literal words
$first_name   // Snakecase
$firstNameIs  // Camelcase
$FirstNameIs  // Pascalcase


// Hungarian Notation with Camelcase notation
$arrDistributeGroup  // Array called “Distribute Group”
$sUserName           // String called “User Name”
$iRandomSeed         // Integer called “Random Seed”

✅ আউটপুট স্টেটমেন্টে ভ্যারিয়েবল এর ব্যবহার

Example 1:

<?php
$txt = "Bangladesh";
echo "I love $txt";
?>


Output: I love Bangladesh
Example 2:

<?php
$txt = "Bangladesh";
echo "I love"." ". $txt;
?>


Output: I love Bangladesh
Example 3:

<?php
$x = 5;
$y = 4;
echo $x + $y;
?>


Output: 9

✅ ভ্যারিয়েবল এর প্রকারভেদ (Types of variables)


👉 PHP তে Variable মূলত দুই ধরনের:
  1. Predefined Variables বা PHP language কর্তৃক পূর্ব নির্ধারিত ভ্যারিয়েবল
  2. User Defined Variables বা Programmer বা Developer কর্তৃক নির্ধারিত ভ্যারিয়েবল

:arrow_right: Predefined Variables বা PHP language কর্তৃক পূর্ব নির্ধারিত ভ্যারিয়েবল

:point_right: PHP তে ব্যবহৃত Super Global Variable সমূহকে Predefined Variables বা PHP language কর্তৃক পূর্ব নির্ধারিত ভ্যারিয়েবল বলা হয়। PHP তে বেশ কিছু Super Global Variable রয়েছে। যেমনঃ $GLOBALS, $_SERVER, $_GET, $_POST, $_FILES, $_COOKIE, $_SESSION, $_REQUEST, $_ENV,

:arrow_right: User Defined Variables বা Programmer বা Developer কর্তৃক নির্ধারিত ভ্যারিয়েবল

:point_right: PHP স্ক্রিপ্টে একজন প্রোগ্রামার বা ডেভেলপার ডেটা সংরক্ষণের জন্য নিজের ইচ্ছামতো প্রাসঙ্গিক নাম ব্যবহার করে অনেক ভ্যারিয়েবল ডিক্লেয়ার করে থাকেন। এবং সম্পূর্ণ স্ক্রিপ্ট জুড়ে এসকল ভ্যারিয়েবল ব্যবহার করেন। PHP তে ব্যবহৃত এই ধরনের ভ্যারিয়েবলকে User Defined Variables বা Programmer বা Developer কর্তৃক নির্ধারিত ভ্যারিয়েবল বলা হয়।

User Defined Variable ৩ ধরনের:

  1. variable scope বা স্থান ভিত্তিক variable
  2. variable variables অর্থাৎ কোনো ভ্যারিয়েবল এর value কে variable করা।
  3. Reference Variable বা একটা ভ্যারিয়েবল এর value তে ভিন্ন ভিন্ন ভ্যারিয়েবল নাম দিয়ে access করতে পারা।

✅ ভ্যারিয়েবল স্কোপ (variable Scope)

:point_right: সাধারণত একটি PHP স্ক্রিপ্টের যেকোনো জায়গায় ভ্যারিয়েবল ডিক্লেয়ার বা ঘোষণা করা যায়।
ভ্যারিয়েবল স্কোপ (Variable Scope) হচ্ছে PHP স্ক্রিপ্টের বিভিন্ন অংশে ভ্যারিয়েবল ঘোষণা করতে পারা।

PHP তে স্কোপভিত্তিক ভ্যারিয়েবল তিন প্রকার

  1. লোকাল ভ্যারিয়েবল (Local Variable)
  2. গ্লোবাল ভ্যারিয়েবল (Global Variable)
  3. স্ট্যাটিক ভ্যারিয়েবল (Static Variable)

:arrow_right: লোকাল ভ্যারিয়েবল (Local Variable)

:point_right: কোনো Function এর ভিতরে যখন কোনো ভ্যারিয়েবল ঘোষণা করা হয় তখন তখন সেই ভ্যারিয়েবল শুধুমাত্র ঐ Function এর ভিতরেই ব্যবহার করা যায়। এটিকে বলা হয় লোকাল স্কোপ (Local Scope)। এক্ষেত্রে ভ্যারিয়েবল কে Function এর বাইরে ব্যবহার করা যায় না। এ ধরনের ভ্যারিয়েবলকে লোকাল ভ্যারিয়েবল বলা হয়।

Exaple:

<?php
function myTest() {
    $x = 5;   // local scope
    echo $x;
} 
myTest();
 
echo $x;  // using $x outside the function will generate an error
?>

ব্যাখ্যাঃ উপরের উদাহরণটিতে myTest( ) নামের ফাংশনের ভিতর $x নামের একটি ভ্যারিয়েবল ঘোষনা করা হয়েছে যা একটি local ভ্যারিয়েবল। এটিকে local scope বলা হয় কারণ ভ্যারিয়েবলটিকে ফাংশনের ভিতরে ঘোষনা করা হয়েছে। এক্ষেত্রে ভ্যারিয়েবলটিকে অবশ্যই ফাংশনের ভিতরে ব্যবহার করতে হবে যা উদাহরণটিতে দেখানো হয়েছে। ফাংশনের বাইরে ব্যবহার করলে Error বার্তা প্রদর্শন করবে।

:arrow_right: গ্লোবাল ভ্যারিয়েবল (Global Variable)

:point_right: কোনো Function এর বাইরে যখন কোনো ভ্যারিয়েবল ঘোষণা করা হয় তখন তখন সেই ভ্যারিয়েবল শুধুমাত্র ঐ Function এর বাইরেই ব্যবহার করতে হয়। এটিকে বলা হয় গ্লোবাল স্কোপ (Local Scope)। এক্ষেত্রে ভ্যারিয়েবল কে Function এর ভিতরে ব্যবহার করা যায় না। এ ধরনের ভ্যারিয়েবলকে বলা হয় গ্লোবাল ভ্যারিয়েবল।

Example:

<?php
$x = 5;  // global scope
 
function myTest() {
    echo $x;   // using $x inside the function will generate an error
} 
myFunc();
 
echo $x;
?>

ব্যাখ্যাঃ উপরের উদাহরণটিতে myTest( ) নামের ফাংশনের বাইরে $x নামের একটি ভ্যারিয়েবল ঘোষনা করা হয়েছে যা একটি global ভ্যারিয়েবল। এটিকে global scope বলা হয় কারণ ভ্যারিয়েবলটিকে ফাংশনের বাইরে ঘোষনা করা হয়েছে। এক্ষেত্রে ভ্যারিয়েবলটিকে অবশ্যই ফাংশনের বাইরে ব্যবহার করতে হবে যা উদাহরণটিতে দেখানো হয়েছে। ভ্যারিয়েবলটিকে ফাংশনের ভিতরে ব্যবহার করলে Error বার্তা প্রদর্শন করবে।

:point_right: ফাংশনের মধ্যে কোনো গ্লোবাল ভ্যারিবেলকে এক্সেস করার জন্য global keyword ব্যবহৃত হয়। global keyword এর মাধ্যমে ভ্যারিয়েবল এক্সেস করার জন্য ভ্যারিয়েবলের নামের পূর্বে global নামের keyword ব্যবহার করতে হয়।

Example:

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

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

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

:point_right: আবার, PHP তে global ভ্যারিয়েবলের মান $GLOBALS[index] নামের অ্যারেতেও সংরক্ষণ করা যায়। এখানে index হচ্ছে ভ্যারিয়েবলের নাম। এই অ্যারে -কে সরাসরি ফাংশনের মধ্যে থেকে এক্সেস করা যায় এবং এর মাধ্যমে ভ্যারিয়েবলের মান আপডেট করা যায়।

Example:

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

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

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

:arrow_right: স্ট্যাটিক ভ্যারিয়েবল (Static Variable)

:point_right: কোনো ভ্যারিয়েবলের সামনে static কীওয়ার্ড ব্যবহার করলে সেটি স্ট্যাটিক ভ্যারিয়েবল হয়ে যায়। সাধারণত একটি ফাংশনের এক্সিকিউশন শেষ হয়ে গেলে ফাংশনে ব্যবহৃত ভ্যারিয়েবলগুলোও মুছে যায় বা ধ্বংশ হয়ে যায়। কিন্তু স্ট্যাটিক ভেরিয়েবল ব্যবহার করলে তা হয়না বরং ফাংশনের এক্সিকিউশন শেষ হয়ে গেলেও এই ধরনের ভেরিয়েবল অ্যাসাইনকৃত মান ধরে রাখে এবং ঐ ফাংশনকে আবার call করলে তখন সে অ্যাসাইন করা মানটি পাঠিয়ে দেয়।

Example:

<?php
function myTest() {
  static $x = 0;
  echo $x;
  $x++;
  echo "\n";
}

myTest();
myTest();
myTest();
?> 


Output: 
0
1
2

✅ Variable variable

👉 PHP তে Dynamically ভ্যারিয়েবলের নাম সেট করা এবং dynamically ভ্যারিয়েবল এর মান এক্সেস করা যায়। যে সকল ভ্যারিয়েবল এর মান dynamically সেট করা যায় এবং এক্সেস করা যায় সেগুলোকে PHP'র ভাষায় variable variable বলা হয়।
Dynamically ভ্যারিয়েবল এর নাম সেট করাঃ

<?php
$greet = 'hello';

$$greet = 'world';        // sets $hello as the variable name

echo "$greet $hello";     // output: hello world
echo "$greet {$$greet}";  // output: same as above
?>
Dynamically ভ্যারিয়েবল এর ভ্যালু এক্সেস করাঃ

<?php
$fname = 'Zulfikar';
$name = 'fname';

echo $$name;              // print: Zulfikar

echo 'Hello '.$name;      // output: Hello fname
echo "\n";                // new line
echo "Hello $$name";      // output: Hello $fname
echo "Hello {$$name}";    // output: Hello Zulfikar
?>

✅ Reference variable

👉 Reference variable বলতে এমন ধরনের ভ্যারিয়েবলকে বুঝায় যার ভ্যালু হিসেবে অন্য কোনো ভ্যারিয়েবেলকে (ভ্যারিয়েবল এর ভ্যালু) অ্যাসাইন করা হয় এবং অ্যাসাইনকৃত ভ্যারিয়েবলের ভ্যালু পরিবর্তন হবার সাথে সাথে সেই ভ্যারিয়েবলের ও ভ্যালু পরিবর্তিত হয়।
Example:

<?php
$var1=10;
$var2=&$var1;
echo "$var1 $var2
";
$var2=20;
echo "$var1 $var2
";
?>


Output:
10 10
20 20


✅ ভ্যারিয়েবল এর ডিফল্ট ভ্যালু

👉 PHP তে ভ্যারিয়েবল ডিক্লেয়ার করার সময় এর যে মান ভ্যালু অ্যাসাইন করে দেওয়া হয় সেই মান বা ভ্যালু-ই হচ্ছে উক্ত ভ্যারিয়েবল এর ডিফল্ট ভ্যালু। পরবর্তীতে যদি আবার সেই একই ভ্যারিয়েবল এর মান পরিবর্তন করা হয় তবে ডিফল্ট ভ্যালুটি পরিবর্তন হয়ে যাবে এবং নতুন ভ্যালু সেট হবে।
Example:

<?php
$name = "Zulfikar"; //Default value 
echo $name; //This will output: Zulfikar

$name = "Ali"; //New assigned value of same variable
echo $name; // This will output: Ali
?>

👉 পূর্বে থেকে অ্যাসাইন করা কোনো ভ্যারিয়েবল এর মান (ডিফল্ট মান) অন্য একটি নতুন ভ্যারিয়েবল এর মধ্যে অ্যাসাইন করে দেওয়া যায়।
Example: 

<?php
$name = 'Zulfikar';

$firstName = $name;

echo $firstName; // Output: Zulfikar
?>

ব্যাখ্যাঃ উপরের প্রোগ্রামটিতে $name ভ্যারিয়েবলের মধ্যে Zulfikar স্ট্রিং ভ্যালু অ্যাসাইন করা হয়েছে। পরের স্টেটমেন্টে $firstname নামের আরেকটি নতুন ভ্যারিয়েবলের মধ্যে $name ভ্যারিয়েবলের ডিফল্ট ভ্যালু অ্যাসাইন করা হয়েছে। এতে করে $firstname ভ্যারিয়েবলের ডিফল্ট মান হয়ে যাবে Zulfikar , যা আমরা echo এর মাধ্যমে দেখতে পাচ্ছি।

:point_right: একটি ভ্যারিয়েবল এর মান বা ভ্যালু অন‍্যকোনো ভ্যারিয়েবল এ অ্যাসাইন করার পর দুইটি ভ্যারিয়েবল এর যেকোন একটি বা উভয়টির ভ্যালু পরিবর্তন করা যায়। সেক্ষেত্রে একটির ভ্যালু পরিবর্তন করার কারণে অন্যটির ভ্যালু বা মানের কোন পরিবর্তন হবে না। একে PHP’র ভাষায় Assignment by value বলা হয়।

Example:

<?php
$name = 'Zulfikar';

$firstName = $name;

$name = 'Ali';

echo $firstName; // Output: Zulfikar
// try to change the value of $firstName variable and see the output

echo $name; // Output: Ali
?>

👉 একটি ভ্যারিয়েবল এর ভ্যালু পরিবর্তন হবার সাথে সাথে অন্য ভ্যারিয়েবল এর মান ও অটোমেটিক পরিবর্তন হবার প্রক্রিয়াকে Assigned by reference বলা হয়। এক্ষেত্রে একটি ভ্যারিয়েবলের মধ্যে অন্য একটি ভ্যারিয়েবল অ্যাসাইন করার সময় পূর্বের ভ্যারিয়েবল এর নামের আগে একটি `&` ampersand চিহ্ন ব্যবহার করতে হয়। শুধুমাত্র পূর্বে অ্যাসাইন করা ভ্যারিয়েবল এর ক্ষেত্রেই Assigned by reference পদ্ধতিটি ভ্যালিড (Valid)।
Example:

<?php
$foo = 'Zulfikar';         // Assign the value 'Zulfikar' to $foo
$bar = &$foo;            // Assign value of $foo to $bar.
$bar = "My name is $bar";  // Alter $bar...
echo $bar;         // Output: My name is Zulfikar
echo $foo;  // $foo is altered too. Meaning it's output also: My name is Zulfikar

✅ PHP একটি Loosely Typed Language

:point_right: একটি ভ্যারিয়েবলের মধ্যে বিভিন্ন ধরনের ডেটা থাকতে পারে, যেমনঃ স্ট্রিং (String) বা অক্ষর, ইন্টিজার (Integer) বা পূর্ণসংখ্যা, ফ্লোট (Float) বা ভগ্নাংশ, বুলিয়ান (Boolena) বা সত্য-মিথ্যা ইত্যাদি। PHP তে ভ্যারিয়েবল বা চলক ঘোষণার সময় ভ্যারিয়েবলের ডেটা টাইপ (Data Type) উল্লেখ করার প্রয়োজন হয় না। কারণ ভ্যারিয়েবল ঘোষণার সময় যখন ভ্যারিয়েবলের মধ্যে ডেটা বা ভ্যালু অ্যাসাইন করা হয় তখন PHP স্বয়ংক্রিয়ভাবে ঐ ডেটার টাইপ নির্ধারণ করে নেয়। তাই PHP কে Loosely Typed language বলা হয়।

1 Like

donnobad onekta sohoj laglo.