Rasel khan web programming

বৃহস্পতিবার, ৩ মে, ২০১২

পিএইচপি ভেরিয়েবল স্কোপ

পিএইচপি ভেরিয়েবল টিউটোরিয়াল - পিএইচপি ভেরিয়েবল স্কোপ
 
লেখক রাসেল খান

ভেরিয়েবল স্কোপ
একটা ফাংশনে একটা ভেরিয়েবল থাকতে পারে,নিচের উদাহরনটি দেখুন
01.<?php
02.$number = 8;
03. 
04.function calculation(){
05.$number  = 10;
06. 
07.$anothernumber = 20;
08. 
09.$addnumber  = $number+$anothernumber;
10. 
11.echo $addnumber;
12.}
13. 
14.echo "This \$number variable from outside of calculation() function and its value is $number";
15. 
16.echo "</br>";
17. 
18.calculation();
19. 
20.?>
আউটপুট
This $number variable from outside of calculation() function and its value is 8
18

[*দেখুন ভেরিয়েবল চিহ্ন $ এর আগে \ (ব্যাকস্লাশ) চিহ্ন দেয়াতে সেটা ভেরিয়েবল হিসেবে গন্য হয়নি বরং স্ট্রিং এর মত আউটপুট হয়েছে।এটাকে বলে এসকেপ ক্যারেক্টার (escape character)]
এখানে ফাংশনের ভিতর $number নামে একটা ভেরিয়েবল আছে এবং ফাংশনের বাইরেও এই একই নামে আরেকটা ভেরিয়েবল আছে ($number = 8;)।ভেরিয়েবল দুটির নাম একই কিন্তু সম্পূর্ন আলাদা ভেরিয়েবল।কারন একটা ফাংশনের ভিতর আর একটা বাইরে।ভিতরের এই ভেরিয়েবলটিকে বলে লোকাল ভেরিয়েবল।আর বাইরের ভেরিয়েবলটির নাম গ্লোবাল ভেরিয়েবল
লোকাল ভেরিয়েবলটি শুধু এই ফাংশনের ভিতরেই ব্যবহার করা যাবে,ফাংশনের বাইরে থেকে একসেস পাওয়া যাবেনা।এই যে একটা ভেরিয়েবল শুধু একটা নির্দিষ্ট জায়গায় ব্যবহার করা যাচ্ছে,এটাই হল এই ভেরিয়েবলটির স্কোপ।

গ্লোবাল ভেরিয়েবল
গ্লোবাল ভেরিয়েবল একটা প্রোগ্রামের ভিতর যেকোন জায়গায় ব্যবহার করা যায়।একটা ফাংশনে গ্লোবাল ভেরিয়েবল ব্যবহার করার জন্য দুটি পদ্ধতি আছে-

পদ্ধতি ১ ($GLOBALS['number'])
ধরুন উপরের প্রোগ্রামে ব্যবহৃত গ্লোবাল ভেরিয়েবলটি যদি ফাংশনে ব্যবহার করতে চান তাহলে নিচের মত কোড লিখতে হবে
01.<?php
02.$number = 8;
03. 
04.function calculation(){
05.$GLOBALS["number"];
06.$number  = 10;
07. 
08.$anothernumber = 20;
09. 
10.$addnumber  = $number+$GLOBALS["number"];
11. 
12.echo $addnumber;
13. 
14.}
15. 
16.calculation();
17. 
18.?>
ফাংশনের বাইরের $number ভেরিয়েবলটিকে ফাংশনের ভিতর $GLOBALS অ্যারে দিয়ে নিয়ে এসেছি।ফাংশনটি যদি আরও বড় হত এবং আরও অন্য কোথাও গ্লোবাল ভেরিয়েবলটি ব্যবহার করতে হত তাহলে প্রতিবারই $GLOBALS["number"] এটা লিখে ব্যবহার করতাম।

পদ্ধতি ২ (global $number)
এই পদ্ধতিতে একটা ম্যাজিক আছে একটু ভালভাবে পড়ুন।ধরুন আগের মতই ফাংশনের বাইরের $number (যেটা গ্লোবাল) ভেরিয়েবলটিকে ব্যবহার করার জন্য আমাদের শুধু $number এর আগে global শব্দটি লিখে দিতে হবে।অর্থাৎ নিচের মত
1.global $number
এবং এরপর থেকে যদি শতবারও এই ভেরিয়েবলটি ব্যবহার করতে হয় তাহলে কিভাবে লিখবেন? global $number এভাবে? না।বরং এভাবে $number. এবার ম্যাজিকটার কথা বলি নিচের কোড দেখুন
01.<?php
02.$number = 8;
03. 
04.function calculation(){
05.global $number;
06.$number  = 10;
07. 
08.$anothernumber = 20;
09. 
10.$addnumber  = $number+$number;
11. 
12.echo $addnumber;
13. 
14.}
15. 
16.calculation();
17. 
18.?>
উপরের কোডে (যেখানে $GLOBALS অ্যারে ব্যবহার করলাম) ৬ নম্বর লাইনে $number হচ্ছে লোকাল ভেরিয়েবল আর এই কোডে এই লাইনটি দ্বারা গ্লোবাল ভেরিয়েবলে নতুন নাম্বার ১০ assign করা হয়েছে।(কারনতো আগেই বলেছি যে global $number কে ব্যবহার করতে এখন $number এভাবে লিখতে হবে)
এরপর ১০ নম্বর লাইনে এই ভেরিয়েবলটির সাথে তাকেই আবার যোগ করেছি,কোড রান করান আউটপুট আসবে ২০।কাজেই global শব্দ ব্যবহার করে ভেরিয়েবল ব্যবহারের সময় সতর্ক থাকতে হবে।সবচেয়ে ভাল $GLOBALS["number"] এভাবে ব্যবহার করুন।তাহলে আর কোন শংকা থাকেনা।
আরেকটা গুরত্বপূর্ন জিনিস,নিচের কোড দেখুন এখানে echo করলে আউটপুট কত আসবে?১০, ২০ না ৩০?
1.<?php
2.$number = 10;
3.$number = 20;
4.$number = 30;
5.echo $number;
6.?>
উত্তর হচ্ছে ৩০,কারন প্রথমে $number এর মান ছিল ১০,এরপরের বার $number এর মান assign করা হয়েছে ২০ আর সব শেষে ৩০ এবং শেষেরটা echo হয়েছে।
এই কোডের উপরের কোডটাতে যখন global $number লিখেছিলাম তখন এর মান ছিল ৮ (কারন ফাংশনের বাইরে গ্লোবাল $number এর মান ৮ আছে) পরের লাইনে $number = 10 দেয়াতে এর মান assign হয়েছে ১০ এবং এটিই এখন এর আসল মান।

স্টাটিক ভেরিয়েবল
কোন ভেরিয়েবলের সামনে static শব্দটি লিখলে সেটা স্টাটিক ভেরিয়েবল হয়ে যায়।একটা ফাংশনে স্টাটিক ভেরিয়েবল ব্যবহৃত হয়।ফাংশনের হেডারে প্যারমিটার থাকতে পারে এগুলিও ভেরিয়েবল।যখন ফাংশন এক্সিকিউট শেষ হয়ে যায় তখন ভেরিয়েবলগুলিও ধ্বংশ হয়ে যায়।স্টাটিক ভেরিয়েবল ব্যবহার করলে তা হয়না বরং ফাংশন শেষ হয়ে গেলেও এই ভেরিয়েবল মান ধরে রাখে এবং ঐ ফাংশনকে আবার call করলে তখন সে ধরে রাখা মানটি পাঠিয়ে দেয় যেমন
01.<?php
02.function test_stat() {
03.static $ekta_variable = 0;
04.$ekta_variable++;
05.echo $ekta_variable;
06.echo "<br />";
07.}
08.test_stat();
09.test_stat();
10.test_stat();
11.?>
ব্যাখ্যা:ফাংশনে প্রথমে $ekta_variable ভেরিয়েবলের মান ছিল ০ আর $ekta_variable++ দ্বারা এই মান ১ বৃদ্ধি পেল তাই প্রথম ফাংশনটা call করাতে আউটপুট দিল ১,এখন $ekta_variable এর মান ০ থেকে হয়ে গেল ১।এরপর দ্বিতীয়বার ফাংশটাকে call করাতে আউটপুট দিল ২ এভাবে বাকিগুলি।
যদি static শব্দটি উঠিয়ে দেন তাহলে আউটপুট আসবে
1
1
1
আর স্টাটিক ভেরিয়েবল ব্যবহারের কারনে এখন আউটপুট আসবে
1
2
3

সুপারগ্লোবাল ভেরিয়েবল
পিএইচপি আগে থেকেই কিছু ভেরিয়েবল তৈরী করে রেখেছে ইচ্ছে করলে এই ভেরিয়েবলগুলি কোডের যেকোন জায়গায় ব্যবহার করতে পারেন।নাম সুপারগ্লোবাল ভেরিয়েবল।এসব ভেরিয়েবল ব্যবহার করে অনেক গুরত্বপূর্ন তথ্য পেতে পারেন যেমন  ইউজারের অপরেটিং সিস্টেম কি,কোন ব্রাউজার ব্যবহার করছে,বর্তমান সেশন,আইপি এড্রেস ইত্যাদি।যেমন
1.<?php
2.printf("Your browser is: %s", $_SERVER['HTTP_USER_AGENT']);
3.?>
আউটপুট
Your browser is: Mozilla/5.0 (Windows NT 6.1; rv:6.0.2) Gecko/20100101 Firefox/6.0.2

এখানে $_SERVER['HTTP_USER_AGENT'] হচ্ছে সুপারগ্লোবাল ভেরিয়েবল।এরকম আরো আছে যেমন
$_SERVER['REMOTE_ADDR'] এটা দিয়ে ক্লাইন্টের আইপি এড্রেস জানতে পারবেন।
$_POST
$_GET
$_FILES আপলোডকৃত ফাইলের তথ্য আনা যায়
$_ENV
$_SEESION
$_COOKIE
এগুলির প্রতিটির উপর পরে আলাদা আলাদা টিউটোরিয়াল আছে তাই এখানে বিস্তারিত দেয়া হলনা।

কনস্টান্ট
ভেরিয়েবলের মান কোডে বিভিন্ন সময় বিভিন্ন রকম হয় বা পরিবর্তন হয়।কিন্তু কনস্টান্টের মান নির্ধারিত পরিবর্তন হবেনা পুরো স্ক্রিপ্টে। পিএইচপিতে define() ফাংশন দ্বারা কনস্টান্ট এর মান ঠিক করে দেয়া যায়।যেমন
1.<?php
2.define ('TUTORIAL','Webcoachbd is a informative tutorial site');
3.echo TUTORIAL;
4.?>
আউটপুট
Webcoachbd is a informative tutorial site
একবার মান ঠিক করে দিলে আর কখনও এই মান পরিবর্তন হবেনা।যেমন পাই (Π) এর মান ৩.১৪১৬ ,এদের মান নির্ধারন করার ক্ষেত্রে কনস্টান্ট ব্যবহার করা উপকারী।

কোন মন্তব্য নেই:

একটি মন্তব্য পোস্ট করুন