دوره‌ها / آموزش جامع PHP (از صفر تا استادی) / متغیرهای سراسری (PHP Superglobals)

متغیرهای سراسری (PHP Superglobals)

30 دقیقه Article

ابر-سراسری‌ها (Superglobals): متغیرهایِ همه‌جا حاضر 🌐📡

PHP متغیرهایی دارد که در تمامِ اسکوپ‌ها (حتی داخلِ توابع و کلاس‌ها) بدونِ هیچ دستورِ اضافه‌ای در دسترس هستند. این‌ها پلِ ارتباطیِ شما با وب‌سایت، کاربر و سرور هستند.

۱. $GLOBALS

دسترسی به تمامِ متغیرهایی که در اسکوپِ سراسری تعریف کرده‌اید.

۲. $_SERVER

شاملِ اطلاعاتی درباره مسیرهایِ فایل، آدرسِ IP کاربر، نوعِ مرورگر و متدهایِ درخواست.

۳. $_REQUEST, $_POST, $_GET 📥

  • $_GET: دریافتِ داده‌ها از آدرسِ بار (URL).
  • $_POST: دریافتِ داده‌هایِ حساس (مثل پسورد) از فرم‌هایِ HTML.
  • $_REQUEST: شاملِ هر دو مورد بالا.

۴. $_SESSION, $_COOKIE

برایِ ذخیره‌یِ اطلاعاتِ کاربر در طولِ زمان (مثلِ لاگین ماندن).

امنیت (XSS): هرگز داده‌هایی که از $_GET یا $_POST می‌گیرید را مستقیماً چاپ نکنید! هکرها می‌توانند کدهایِ مخرب تزریق کنند. همیشه از htmlspecialchars() استفاده کنید.

پیدا کردنِ صفحه فعلی:

{code_block('echo $_SERVER["PHP_SELF"];')}
$_ENV: برایِ خواندنِ متغیرهایِ محیطیِ سیستم استفاده می‌شود (در معماری‌هایِ مدرن و داکر بسیار مهم است).
<hr style="margin: 50px 0; border: 0; border-top: 1px dashed rgba(255,255,255,0.1);">

بخش تخصصی: مهندسی منطق و پرفورمنس در PHP 🐘⚙️

در سطوحِ حرفه‌ای، اجرایِ کد فقط کافی نیست؛ "چگونگیِ" اجرا و بهینه‌سازیِ آن تفاوتِ بینِ یک کدِ معمولی و یک معماریِ مقیاس‌پذیر را رقم می‌زند.

۱. بهینه‌سازیِ محاسبات با BCMath

در سیستم‌هایِ مالی و بانکی، دقتِ اعشاریِ معمولی (Float) به دلیلِ خطاهایِ گرد کردنِ باینری قابلِ اعتماد نیست. برایِ این کار، PHP افزونه‌ای به نام BCMath دارد که محاسبات را با دقتِ نامحدود و به صورتِ رشته‌ای انجام می‌دهد تا حتی یک ریال هم در محاسبات جابجا نشود.

۲. ساختارِ HashTable در آرایه‌ها

آرایه‌ها در PHP برخلافِ بسیاری از زبان‌ها، در واقع Ordered Hash Maps هستند. هر زمان که شما عضوی به آرایه اضافه می‌کنید، PHP یک سیستمِ Bucket و Hash را در پشتِ صحنه مدیریت می‌کند تا سرعتِ دسترسی به داده‌ها در حالتِ میانگین O(1) باقی بماند.

۳. مفهومِ Closures و کپسوله‌سازی

توابعِ بی‌نام (Anonymous) در PHP فقط برایِ کارهایِ موقت نیستند. با استفاده از کلمه کلیدی use، می‌توانید متغیرهایی را از اسکوپِ بیرونی به داخلِ تابع وارد کنید و یک Closure بسازید که پایه و اساسِ بسیاری از الگوهایِ طراحی مدرن است.

نکته طلایی: همیشه برایِ شرط‌هایِ پیچیده از Early Return استفاده کنید. به جایِ تودرتو کردنِ ifها، ابتدا حالت‌هایِ خطا را چک کرده و از تابع خارج شوید تا خواناییِ کد به حداکثر برسد.

تمرین‌های عملی

برای تثبیت یادگیری این درس تمرین‌های زیر را حل کنید

دریافتِ نامِ سرور Medium
سوال تمرین

با استفاده از متغیرِ $_SERVER، نامِ سرور (SERVER_NAME) را چاپ کنید.

پاسخ تمرین
PHP
<?php
echo $_SERVER['SERVER_NAME'];
?>

آماده رفتن به درس بعدی هستید؟

این درس را به پایان رساندید و می‌توانید به درس بعدی بروید.