آموزش متغیر سراسری در PHP

متغیرهای سراسری در محدوده کل یک فایل در حال اجرا قابل استفاده هستند. برای متغیر سراسری در PHP دو حالت می‌توان در نظر گرفت. یکسری از متغیرها را خودمان بنا به نیاز به صورت سراسری (global) تعریف می‌کنیم و نوع دیگر، متغیرهای فوق سراسری (superglobal) هستند که به طور پیش‌فرض وجود دارند.

در این آموزش هر دو حالت متغیرهای سراسری در php را با هم یاد می‌گیریم. احتمالاً با متغیرها آشنا هستید، اگر نیستید، آموزش متغیر در PHP و انواع آن را ببینید. از متغیرها برای ذخیره‌سازی مقادیر به صورت موقت در برنامه نویسی استفاده می‌شود.

متغیر سراسری در PHP چیست ؟

همانطور که می‌دانید، کدهای یک برنامه از محدوده (scope) هایی تشکیل می‌شود. اجازه دهید با یک مثال ادامه دهم. فرض کنید در یک برنامه ساده، به کمک تعریف تابع PHP یک تابعی نوشتیم که مقدار $x را چاپ می‌کند.

در قطعه کد زیر، دو محدوده داریم. یکی از محدوده‌ها، فضای درون تابع my_print() است که با علامت {} مشخص شده است. scope دوم، فضای کل برنامه، غیر از فضای درون تابع است.

<?php

$x = 9;
function change() {
    $x = 16;
}
change();

echo $x;

اگر این کد را اجرا کنیم، نتیجه به صورت زیر خواهد شد. می‌بینیم که $x در زمان چاپ با تابع echo دارای مقدار مرتبطش در همان محدوده است و اجرای تابع change() هیچ تغییری در مقدار آن ایجاد نکرده است.

نتیجه کد مثال محدوده تعریف متغیر
نتیجه کد مثال محدوده تعریف متغیر

اگر بخواهیم این مرزبندی (بر اساس محدوده‌ها) را برداریم، از مفهوم متغیر سراسری در PHP استفاده می‌کنیم.

تعریف متغیر سراسری global

کلمه کلیدی global در PHP برای اشاره به متغیر موجود در بالاترین محدوده یک کد استفاده می‌شود. در مثال بالا، مقدار x در بالاترین محدوده برابر 9 است.

وقتی درون تابع به کمک global مقدار $x را معرفی می‌کنیم، مثل این است که بگوییم در محدوده تابع، یک متغیر به نام $x تعریف می‌کنیم که اشاره به همان متغیر scope بالاتر دارد. به مثال زیر توجه کنید:

<?php
$x = 9;
function change() {
    global $x;
    $x = 16;
}
change();

echo $x;

خروجی این کد را در تصویر زیر می‌بینید. وقتی از global استفاده کردیم، متغیر x را در فضای تابع change() به صورت یک مقدار سراسری تعریف کرده و سپس از آن استفاده می‌کنیم.

نتیجه اجرای کد مثال با global
نتیجه اجرای کد مثال با global

متغیر فوق سراسری PHP

در زبان برنامه‌نویسی PHP متغیرهای سراسری از پیش تعریف شده‌ای وجود دارند که متناسب با نیازمان می‌توانیم از آن‌ها استفاده کنیم. به این متغیرها PHP SuperGlobal گفته می‌شود که در فارسی به «فوق سراسری» ترجمه شده است.

این متغیرها همیشه و در تمام محدوده‌ها (Scopeها) در دسترس هستند. به این معنی که برای استفاده از آن‌ها، نیازی به استفاده از global پیش از آن‌ها نیست.

متغیرهای superglobal در PHP عبارت‌اند از:

  • $GLOBALS
  • $_SERVER
  • $_GET
  • $_POST
  • $_FILES
  • $_COOKIE
  • $_SESSION
  • $_REQUEST
  • $_ENV

تعریف هر کدام از این‌ها خودش یک دنیای دیگری است! 🙂 هر کدام از این‌ها یک آرایه هستند که داده‌های مختلفی را برایمان نگهداری می‌کنند.

پنج مورد از این متغیرها را در آموزشی جداگانه به طور مفصل بررسی کرده‌ایم. اشاره مختصری به استفاده آن‌ها می‌کنم و برای یادگیری بیشتر، شما را به آموزش مرتبطش ارجاع می‌دهم.

معرفی مختصر ۵ متغیر

از متغیر سراسری $_GET و $_POST برای مدیریت داده‌های ارسالی از طریق فرم‌ها یا URLها در اسکریپت استفاده می‌شود. در آموزش post و get در PHP در مورد نحوه عملکرد و تفاوت این دو صحبت شده و در ساخت فرم PHP از آن‌ها در یک پروژه کوچک استفاده می‌کنیم.

وقتی می‌خواهیم یک فایل را از کامپیوتر روی سرور آپلود کنیم، برای مدیریت فایل آپلود شده و تغییر و ذخیره آن از متغیر سراسری $_FILES در PHP استفاده می‌شود. هر فایل به شکل یک عضو در آرایه این متغیر ذخیره می‌شود. همچنین برای هر فایل نام، MIME فرمت، مسیر موقت، خطای احتمالی و حجم آن نگهداری می‌شود.

برای اینکه از این متغیر در عمل استفاده کنید، آموزش آپلود فایل با PHP را دنبال کنید.

متغیر $_COOKIE برای ذخیره‌سازی اطلاعات متنی کوتاه در مرورگر کاربر استفاده می‌شود. مثلاً در آموزش کوکی PHP ایمیل کاربر را برای شناسایی او در مرورگرش نگهداری می‌کنیم.

متغیر سراسری $_SESSION شبیه به کوکی عمل می‌کند، با این تفاوت که اطلاعات متنی مورد نظر در سمت سرور ذخیره و نگهداری می‌شود. برای مثال، با سشن در PHP می‌توانیم وضعیت لاگین بودن یا نبودن کاربر را نگهداری کنیم.

متغیر $_REQUEST داده‌هایی که با یک فرم HTML ارسال شده‌اند را در خود نگهداری می‌کند. این متغیر به طور پیش‌فرض دارای محتوای get و post و cookie است.

اگر در حال یادگیری طبق آموزش رایگان PHP هستید، آموزش‌های اشاره شده در بالا در گام‌های بعدی آموزش به شما گفته می‌شود.

متغیر سراسری GLOBALS

از $GLOBALS برای دسترسی به متغیرهای سراسری از هر کجا در اسکریپت PHP استفاده می‌شود. عملکردش تقریباً شبیه به کلمه کلیدی global است با این تفاوت که از آن برای تعریف متغیر جدید از درون یک اسکوپ داخلی نیز استفاده می‌شود. به مثال زیر دقت کنید:

<?php
$x = 21;
$y = 13;

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

add();
echo $z;

در این کد، دو متغیر $x و $y در بالاترین اسکوپ، و متغیر $z در اسکوپ داخلی ولی به صورت سراسری تعریف شده‌اند. همانطور که در خط پایانی می‌بینید، می‌توانیم از z در بالاترین محدوده هم استفاده کنیم.

متغیر سراسری SERVER در PHP

این متغیر اطلاعاتی درباره هدرها، مسیرها و موقعیت‌های اسکریپت در خودش نگهداری می‌کند. همانطور که از اسمش پیداست، این اطلاعات مرتبط با مسائل سمت سرور است.

<?php
    echo $_SERVER['PHP_SELF'];
?>

چهار نمونه از مقادیری که در $_SERVER نگهداری می‌شود عبارت‌اند از:

نا متغیرداده‌ها
HTTP_USER_AGENTاطلاعات user-agent مرورگر کاربر
PHP_SELFنام و مسیر نسبی فایل در حال اجرا
SCRIPT_FILENAMEنام و مسیر مطلق فایل در حال اجرا
HTTPSآیا درخواست کاربر روی پروتکل امن است؟

تمام داده‌های درون این متغیر از سمت وب‌سرور ایجاد می‌شود. البته هیچ تضمینی نیست که همه آن‌ها به طور دقیق تعریف شده باشند! اگر دوست دارید با همه مقادیر ذخیره شده در $_SERVER آشنا شوید، به مستنداتش مراجعه کنید.

مرور متغیرهای سراسری

در تعریف variable ها در همه زبان‌های برنامه‌نویسی چیزی به نام محدوده (scope) داریم. وقتی متغیری را در یک محدوده تعریف می‌کنیم، فقط در همان محدوده قابل استفاده و فراخوانی است. به کمک global می‌توانیم از یک محدوده درونی به محدوده بالاتر دسترسی داشته باشیم.

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

امیدوارم بعد از این آموزش با مفهوم متغیر سراسری آشنا شده باشید. همچنین یادتان باشد ۹ متغیر built-in داریم که اطلاعات مفیدی برایمان نگهداری می‌کند و در کارهای مختلف برایمان بسیار کاربردی خواهند بود.