ভূমিকা
প্রোগ্রামিং-এ, স্কোপ বলতে একটি ভেরিয়েবল কতটুকু অ্যাক্সেসযোগ্য সেটকে বোঝায়। সাধারণত, একটি সিম্পল PHP স্ক্রিপ্ট (লুপ, ফাংশন ইত্যাদি কনস্ট্রাক্ট ছাড়া) একটি সিঙ্গল স্কোপ থাকে, অর্থাৎ একটি ভেরিয়েবল প্রোগ্রামে সংজ্ঞায়িত হওয়ার পয়েন্ট থেকে সর্বত্র উপলব্ধ থাকে।
মেইন স্ক্রিপ্টের ভেরিয়েবল include বা require স্টেটমেন্ট দিয়ে সংযুক্ত যেকোনো অন্য স্ক্রিপ্টেও উপলব্ধ করা যায়। নিচের উদাহরণে, একটি test.php স্ক্রিপ্ট মেইন স্ক্রিপ্টে ইনক্লুড করা হয়েছে।
এটি মেইন স্ক্রিপ্ট:
$var=100; include "test.php"; ?>
ইনক্লুড করা ফাইল test.script নিচের মতো:
echo "value of of \$var in testscript.php : " . $var; ?>
মেইন স্ক্রিপ্ট এক্সিকিউট করলে, নিচের রেজাল্ট দেখানো হয়:
value of of $var in testscript.php : 100
তবে, যখন স্ক্রিপ্টে একটি ইউজার-ডিফাইনড ফাংশন থাকে, তখন ফাংশনের ভেতরের যেকোনো ভেরিয়েবল লোকাল স্কোপের হয়। ফলে, ফাংশনের ভেতরে ডিফাইন করা ভেরিয়েবল বাইরে থেকে অ্যাক্সেস করা যায় না। ফাংশনের বাইরে (উপর) ডিফাইন করা ভেরিয়েবল গ্লোবাল স্কোপের হয়।
উদাহরণ
<?php $var=100; //গ্লোবাল ভেরিয়েবল function myfunction(){ $var1="Hello"; //লোকাল ভেরিয়েবল echo "var=$var var1=$var1" . "\n"; } myfunction(); echo "var=$var var1=$var1" . "\n"; ?>আউটপুট
এটি নিচের রেজাল্ট তৈরি করবে:
var= var1=Hello var=100 var1= PHP Notice: Undefined variable: var in line 5 PHP Notice: Undefined variable: var1 in line 8
লক্ষ্য করুন যে গ্লোবাল ভেরিয়েবল স্বয়ংক্রিয়ভাবে ফাংশনের লোকাল স্কোপে উপলব্ধ নয়। 또한, ফাংশনের ভেতরের ভেরিয়েবল বাইরে থেকে অ্যাক্সেসযোগ্য নয়।
global কীওয়ার্ড
গ্লোবাল ভেরিয়েবল লোকাল স্কোপে অ্যাক্সেস করার জন্য স্পষ্টভাবে global কীওয়ার্ড ব্যবহার করে সক্ষম করতে হয়। PHP স্ক্রিপ্ট নিচের মতো:
উদাহরণ
<?php $a=10; $b=20; echo "before function call a = $a b = $b" . "\n"; function myfunction(){ global $a, $b; $c=($a+$b)/2; echo "inside function a = $a b = $b c = $c" . "\n"; $a=$a+10; } myfunction(); echo "after function a = $a b = $b c = $c"; ?>আউটপুট
এটি নিচের রেজাল্ট তৈরি করবে:
before function call a = 10 b = 20 inside function a = 10 b = 20 c = 15 PHP Notice: Undefined variable: c in line 13 after function a = 20 b = 20 c =
এখন গ্লোবাল ভেরিয়েবল ফাংশনের ভেতরে প্রসেস করা যাচ্ছে। Более, ফাংশনের ভেতরে গ্লোবাল ভেরিয়েবলে করা পরিবর্তন গ্লোবাল নেমস্পেসে প্রতিফলিত হবে।
$GLOBALS অ্যারে
PHP সকল গ্লোবাল ভেরিয়েবল একটি অ্যাসোসিয়েটিভ অ্যারেতে সংরক্ষণ করে যা $GLOBALS নামে পরিচিত। ভেরিয়েবলের নাম এবং ভ্যালু কী-ভ্যালু পেয়ার তৈরি করে।
নিচের PHP স্ক্রিপ্টে, $GLOBALS অ্যারে ব্যবহার করে গ্লোবাল ভেরিয়েবল অ্যাক্সেস করা হয়েছে:
উদাহরণ
<?php $a=10; $b=20; echo "before function call a = $a b = $b" . "\n"; function myfunction(){ $c=($GLOBALS['a']+$GLOBALS['b'])/2; echo "c = $c" . "\n"; $GLOBALS['a']+=10; } myfunction(); echo "after function a = $a b = $b c = $c"; ?>আউটপুট
before function call a = 10 b = 20 c = 15 PHP Notice: Undefined variable: c line 12 Notice: Undefined variable: c in line 12 after function a = 20 b = 20 c =
স্ট্যাটিক ভেরিয়েবল
static কীওয়ার্ড দিয়ে ডিফাইন করা একটি ভেরিয়েবল ফাংশন কল করার 때마다 ইনিশিয়ালাইজ হয় না। বরং এটি পূর্বের কলের ভ্যালু রিটেইন করে।
উদাহরণ
<?php function myfunction(){ static $x=0; echo "x = $x" . "\n"; $x++; } for ($i=1; $i<=3; $i++){ echo "call to function :$i : "; myfunction(); } ?>আউটপুট
এটি নিচের রেজাল্ট তৈরি করবে:
call to function :1 : x = 0 call to function :2 : x = 1 call to function :3 : x = 2