سطح C: قلمرو متغیرها (Variable Scope)

دیواری نامرئی بین "داخل تابع" و "خارج تابع".

تفاوت حیاتی با پایتون: در پایتون، شما می‌توانید متغیر بیرونی را داخل تابع بخوانید. در PHP نمی‌توانید! تابع‌های PHP کاملاً ایزوله هستند و متغیرهای بیرونی را نمی‌شناسند، مگر اینکه صریحاً به آن‌ها بگویید.

مثال شکست‌خورده

$name = "Ali"; // متغیر سراسری (Global)

function sayMyName() {
    echo $name; // خطا! من متغیری به نام name نمی‌شناسم.
                // Warning: Undefined variable $name
}

دو راه حل وجود دارد:

۱. استفاده از global (توصیه نمی‌شود)
global $name;

این کار وابستگی ایجاد می‌کند و تست کردن کد را سخت می‌کند.

۲. ارسال به عنوان پارامتر (استاندارد)
function say($input) { ... }

تابع مستقل می‌ماند و هر داده‌ای را می‌پذیرد. این روش صحیح مهندسی نرم‌افزار است.


تمرین عملی: شکستن دیوار

  1. یک متغیر $appName = "My Weblog"; در ابتدای فایل بسازید.
  2. یک تابع printHeader() بسازید و سعی کنید این متغیر را درونش چاپ کنید. (باید خطا یا هشدار بگیرید).
  3. روش غلط: با دستور global $appName; داخل تابع، مشکل را حل کنید.
  4. روش صحیح: تابع را تغییر دهید تا ورودی بگیرد: printHeader($title) و هنگام فراخوانی، متغیر را به آن پاس دهید.

چالش هوش مصنوعی: Dependency Injection

مفهوم "پاس دادن متغیر به عنوان پارامتر" پایه و اساس الگوی طراحی Dependency Injection است.

تکلیف: از هوش مصنوعی بخواهید: "چرا استفاده از global در توابع PHP بد است؟ (۳ دلیل امنیتی و نگهداری)". پاسخ را بخوانید تا درک عمیق‌تری پیدا کنید.