স্কোপ মানে আপনার কোডের কোথা থেকে একটি ভ্যারিয়েবল আসলেই দেখা আর ব্যবহার করা যায় — প্রোগ্রামিং পরিচিতি-তে শেখা একই ধারণা, আর PHP এই বিষয়ে আপনার ব্যবহৃত কিছু ভাষার চেয়ে বেশি কঠোর।
একটি ফাংশনের ভেতরে তৈরি হওয়া ভ্যারিয়েবল শুধু সেই ফাংশনের ভেতরেই থাকে। ফাংশনটি শেষ হওয়া মাত্র সেটা হারিয়ে যায়, আর এর বাইরের কোডের কাছে সম্পূর্ণ অদৃশ্য:
<?php
function setName() {
$name = "Priya"; // local to setName()
echo $name; // works fine here
}
setName();
// echo $name; // Error — $name doesn't exist out here
?>প্রতিটি ফাংশনের বাইরে ঘোষিত একটি ভ্যারিয়েবল গ্লোবাল স্কোপে থাকে — কিন্তু, অনেক ভাষার মতো নয়, একটি PHP ফাংশন শুধু একটি গ্লোবাল ভ্যারিয়েবল আছে বলেই স্বয়ংক্রিয়ভাবে সেটা দেখতে পারে না:
<?php
$siteName = "Learn Computer Academy";
function showName() {
// echo $siteName; // does NOT work — functions don't see globals by default
}
?>একটি ফাংশনের ভেতরে একটি গ্লোবাল ভ্যারিয়েবল ব্যবহার করতে, এটিকে স্পষ্টভাবে global দিয়ে টেনে আনতে হয়:
<?php
$siteName = "Learn Computer Academy";
function showName() {
global $siteName;
echo $siteName; // now this works
}
showName();
?>global-এর বদলে প্যারামিটার প্রাধান্য দিন
পুরো একটি কোডবেসে global-এর উপর নির্ভর করলে একটি মান আসলে কোথা থেকে আসছে তা খুঁজে বের করা কঠিন হয়ে যায়। এখান থেকে প্রায় প্রতিটি উদাহরণে ব্যবহৃত বেশি প্রচলিত, পরিষ্কার প্যাটার্ন হলো মানটিকে বদলে একটি প্যারামিটার হিসেবে পাস করা: function showName($siteName) { echo $siteName; }।
একটি ফাংশনের ভেতরের একটি static ভ্যারিয়েবল প্রতিবার রিসেট হওয়ার বদলে কলগুলোর মধ্যে তার মান ধরে রাখে — একটি একক ফাংশনের ভেতরে থাকা কাউন্টারের জন্য দরকারি:
<?php
function countCalls() {
static $count = 0;
$count++;
echo $count . "\n";
}
countCalls(); // 1
countCalls(); // 2
countCalls(); // 3
?>