متغیرهای سراسری در محدوده کل یک فایل در حال اجرا قابل استفاده هستند. برای متغیر سراسری در 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()
به صورت یک مقدار سراسری تعریف کرده و سپس از آن استفاده میکنیم.
متغیر فوق سراسری 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 داریم که اطلاعات مفیدی برایمان نگهداری میکند و در کارهای مختلف برایمان بسیار کاربردی خواهند بود.
این آموزش بخشی از یک آموزش جامع و قدم به قدم در سبز دانش است: دوره رایگان آموزش PHP
این آموزش برای همیشه رایگانه! میتونید با اشتراکگذاری لینک این صفحه از ما حمایت کنید یا با خرید یه فنجون نوشیدنی بهمون انرژی بدید!
میخوام یه نوشیدنی مهمونتون کنم
سلام اگه آموزشات ویدیویی بود واقعا بهتر میشد
درود امیر عزیز
ممنونم بابت پیشنهاد خوبت. داریم آموزشهای ویدئویی رو هم آماده میکنیم که کنار متنیها اضافه بشه. انشاءالله از اوایل ماه آینده شروع به انتشار میکنیم.
موفق باشی