0Pricing
PHP Academy · درس

نطاق المتغيرات: محلي وعام

افهموا كيفية عزل PHP لنطاق الدوال، وكيفية استخدام الكلمة المفتاحية global.

نطاق المتغيرات: محلي وعام درس مجاني في PHP Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في PHP Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة PHP Academy 4 دروس في المجموع.

نطاق المتغيرات في PHP

يمتلك كل متغير في PHP نطاقًا، أي منطقة الشيفرة التي يمكن الوصول إليه فيها.

  • توجد المتغيرات المُنشأة خارج الدوال في النطاق العام
  • توجد المتغيرات المُنشأة داخل الدوال في النطاق المحلي
  • لا تملك PHP نطاقًا للكتل، بخلاف C أو JavaScript

النطاق المحلي

تكون المتغيرات الموجودة داخل الدالة محلية، وتختفي عند إرجاع الدالة:

<?php
function compute(): void {
    $result = 42;  // local variable
    echo $result;  // 42
}

compute();
echo $result ?? 'undefined';  // undefined — $result is gone

المتغيرات العامة ليست مرئية تلقائيًا

بخلاف العديد من اللغات، لا تستطيع دوال PHP رؤية المتغيرات العامة افتراضيًا، بل يجب استيرادها صراحةً:

<?php
$message = 'Hello';

function printMessage(): void {
    echo $message ?? 'not visible';  // 'not visible'
    // $message from global scope is not accessible here
}

الكلمة المفتاحية global

استخدم global $varName داخل الدالة للوصول إلى متغير عام:

<?php
$counter = 0;

function increment(): void {
    global $counter;
    $counter++;
}

increment();
increment();
echo $counter;  // 2

المتغير العام الفائق $GLOBALS

‏$GLOBALS مصفوفة تحتوي على جميع المتغيرات العامة، ويمكن الوصول إليها من أي مكان دون الكلمة المفتاحية global:

<?php
$total = 100;

function addTax(): void {
    $GLOBALS['total'] *= 1.18;  // 18% tax
}

addTax();
echo $total;  // 118

لماذا يجب تجنب global

يؤدي الإفراط في استخدام global إلى إنشاء تبعيات خفية، فتصبح الدوال صعبة الاختبار وتصحيح الأخطاء. يُفضّل تمرير القيم كوسائط:

<?php
// Bad
$db = new PDO(/* ... */);
function getUsers(): array {
    global $db;
    return $db->query('SELECT * FROM users')->fetchAll();
}

// Good
function getUsers(PDO $db): array {
    return $db->query('SELECT * FROM users')->fetchAll();
}

المتغيرات الساكنة

يحتفظ المتغير static بقيمته بين استدعاءات الدالة، لكنه يظل محليًا للدالة:

<?php
function callCount(): int {
    static $count = 0;
    return ++$count;
}

echo callCount();  // 1
echo callCount();  // 2
echo callCount();  // 3

الإغلاقات والتقاط المتغيرات

يمكن للإغلاقات، وهي الدوال المجهولة، التقاط المتغيرات الخارجية باستخدام use:

<?php
$prefix = 'Mr';

$greet = function(string $name) use ($prefix): string {
    return "$prefix. $name";
};

echo $greet('Smith');  // Mr. Smith

الالتقاط بالمرجع

استخدم الالتقاط بالمرجع مع use (&$var) حتى يتمكن الإغلاق من تعديل المتغير الخارجي:

<?php
$total = 0;

$add = function(int $n) use (&$total): void {
    $total += $n;
};

$add(10);
$add(5);
echo $total;  // 15

الدوال السهمية

تلتقط الدوال السهمية في PHP 7.4 النطاق الخارجي تلقائيًا حسب القيمة باستخدام fn =>، ولا تحتاج إلى use:

<?php
$multiplier = 3;
$nums = [1, 2, 3, 4];

$result = array_map(fn($n) => $n * $multiplier, $nums);

print_r($result);  // [3, 6, 9, 12]

الدوال المتداخلة

تسمح PHP بتعريف دالة داخل دالة أخرى، لكن الدالة الداخلية تصبح متاحة عالميًا بعد استدعاء الدالة الخارجية:

<?php
function outer(): void {
    function inner(): void {
        echo 'inner called';
    }
}

// inner(); // Fatal: undefined before outer() is called
outer();
inner(); // works now

تحقق سريع

ماذا يفعل المتغير static داخل دالة PHP؟

مراجعة: نطاق المتغيرات

قواعد النطاق الأساسية في PHP:

  • للدوال نطاق محلي خاص بها
  • يجب استيراد المتغيرات العامة باستخدام global
  • استخدم $GLOBALS['name'] كبديل
  • تحتفظ المتغيرات static بقيمتها بين الاستدعاءات داخل الدالة
  • تلتقط الإغلاقات المتغيرات الخارجية باستخدام use
  • تلتقط الدوال السهمية المتغيرات تلقائيًا حسب القيمة

الأسئلة الشائعة

هل درس «نطاق المتغيرات: محلي وعام» مجاني؟

نعم — نص درس «نطاق المتغيرات: محلي وعام» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة PHP Academy، انتقل إلى CoddyKit PRO. تتضمن دورة PHP Academy 4 دروس في المجموع.

ماذا ستتعلم في «نطاق المتغيرات: محلي وعام»؟

افهموا كيفية عزل PHP لنطاق الدوال، وكيفية استخدام الكلمة المفتاحية global. تتمرن على PHP Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ PHP Academy؟

لا تُشترط خبرة سابقة. PHP Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.

كم من الوقت يستغرق درس «نطاق المتغيرات: محلي وعام»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس PHP Academy هذا؟

نعم. كل درس في PHP Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. تعريف الدوال واستدعاؤها
  2. المعاملات الافتراضية والمتغيرة العدد
  3. نطاق المتغيرات: محلي وعام
  4. الدوال المجهولة والإغلاقات
← العودة إلى PHP Academy