نطاق متغير PHP. كل ما كنت تريد معرفته ولكن كنت تخشى السؤال. المتغيرات في PHP تعرض قيمة المتغير على الشاشة

تحتوي متغيرات البيئة (البيئة) في Windows على معلومات متنوعة حول إعدادات النظام وبيئة المستخدم. يميز بين متغيرات بيئة المستخدم والنظام والعملية.

أسهل طريقة لعرض محتويات متغيرات البيئة على Windows هي فتح خصائص النظام ( sysdm.cpl) -> خيارات متقدمة -> متغيرات البيئة.كما ترى ، يوجد في القسم المفتوح قسمان: الجزء العلوي يحتوي على متغيرات بيئة المستخدم ، بينما يحتوي الجزء السفلي على متغيرات النظام.

بالإضافة إلى ذلك ، يتم تخزين متغيرات البيئة في سجل النظام. يتم تخزين المتغيرات المخصصة في قسم. جهازي - في HKLM \ SYSTEM \ CurrentControlSet \ التحكم \ إدارة الجلسة \ البيئة.

يمكنك عرض قيم جميع متغيرات البيئة في سطر أوامر Windows. الأمر بسيط:

سيسرد الأمر متغيرات البيئة وقيمها.

في PowerShell ، يمكنك استخدام الأمر لعرض جميع متغيرات البيئة:

إذا كنت تريد طباعة قيمة متغير واحد فقط ، فأنت بحاجة إلى استخدام أمر echo ، ويجب وضع اسم المتغير ضمن علامات النسبة المئوية. على سبيل المثال،

صدى٪ جذر النظام٪

تعيين> c: \ tmp \ env_var.txt

يمكن الحصول على متغيرات البيئة الخاصة بالعملية باستخدام ملف أدوات مستكشف العمليات(من Sysinternals). يكفي فتح خصائص العملية والانتقال إلى علامة التبويب بيئة.

متغيرات phpهو نوع من حاوية المعلومات التي يمكن أن تحتوي على أنواع مختلفة من البيانات (نص وأرقام ومصفوفات وما إلى ذلك). بشكل عام ، تسمح لك المتغيرات بإنشاء وتخزين وتعديل والوصول بسرعة إلى المعلومات المحددة فيها في المستقبل.

كيفية إنشاء متغير في PHP

في البداية ، تحتوي المتغيرات على العلامة $ (بالدولار) - تسمية استخدام المتغير ثم الحروف الأبجدية اللاتينية(من الألف إلى الياء والصغيرة والكبيرة) ، في النهاية يمكن أن تحتوي على أعداد... أيضًا ، يُسمح للاسم باستخدام شرطة سفلية (ليس في النهاية).

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

فار
متغير $
سنة 1945
_ متغير
كيف لا يمكن استدعاء المتغيرات:

1 دولار - يتكون فقط من رقم
متغير $ 1 - لا يمكنك بدء اسم متغير برقم
$ / var - يُسمح فقط للشرطات السفلية بأحرف إضافية _
متغير $ - السيريلية مسموح بها بواسطة وثائق php لكن لا ينصح بها
$ var iable - لا يمكن استخدام المسافات

يتم تعيين قيمة لكل متغير. لتعيين قيمة ، استخدم العلامة = (يساوي). أثناء معالجة البرنامج النصي ، يمكن أن تتغير قيمة المتغير بشكل متكرر حسب الظروف المختلفة.

$ city = "موسكو" ؛ // تم تخصيص سلسلة للمتغير $ city (بين علامتي الاقتباس) بقيمة موسكو
سنة = 1147 دولار ؛ // وتم تخصيص القيمة الرقمية للمتغير $ year 1147
?>

$ name = "ألكسندر" ؛
اسم $ = "أليكسي" ؛
صدى "$ name، $ Name" ؛ // يعرض "ألكسندر ، أليكسي"
?>

مخرجات PHP المتغيرة

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

// هذه هي الطريقة التي نخصص بها قيمًا للمتغيرات
$ name1 = "أليكسي" ؛
$ name2 = "ألكسندر" ؛

// عرض المتغيرات
صدى $ name2؛ // الإخراج: الكسندر
صدى "name1 هو $ name1" ؛ // name1 هو Alexey

// عند استخدام علامات الاقتباس الفردية ، يكون الناتج
// اسم المتغير وليس القيمة
صدى "name1 هو $ name1" ؛ // يطبع: name1 هو $ name1

// يمكنك ببساطة عرض قيم المتغيرات
صدى $ name1؛ // أليكسي
echo $ name1، $ name2؛ // أليكسي الكسندر
صدى $ name1. "". $ name2؛ // أليكسي الكسندر
صدى "$ name1، $ name2"؛ // أليكسي ، ألكساندر

صدى صوت<<يستخدم هذا بناء جملة "هنا المستند" للإخراج
أسطر متعددة مع استبدال المتغير $.
نهاية؛

العمليات المتغيرة PHP

العمليات الحسابية في PHP
في حالة القيم العددية ، يمكنك إجراء عمليات حسابية: الجمع والطرح والضرب وما إلى ذلك.

- $ أ(نفي) قم بتغيير علامة $ a.
$ a + $ b(بالإضافة) مجموع $ a و $ b.
$ a - $ b(طرح) الفرق بين $ a و $ b.
$ a * $ b(الضرب) حاصل ضرب $ a و $ b.
$ أ / $ ب(القسمة) حاصل قسمة $ a على $ b.
$ a٪ $ b(تقسيم modulo) العدد الصحيح المتبقي من $ a مقسومًا على $ b.
لنلق نظرة على الأمثلة

$ أ = 2 ؛ // ملاحظة ، في حالة الأرقام ، لا يتم استخدام علامات الاقتباس
ب = 3 ؛ // ملاحظة ، في حالة الأرقام ، لا يتم استخدام علامات الاقتباس

النتيجة بالدولار = $ a + $ b ؛ // إضافة المتغيرات
صدى $ نتيجة؛ // سيطبع 5

النتيجة بالدولار = ب دولار - أ ؛ // إضافة المتغيرات
صدى $ نتيجة؛ // سيخرج 1

الزيادة والنقصان في PHP
ستكون هذه العمليات مفيدة بشكل أساسي عند بناء الحلقات ، والتي سنتحدث عنها بعد قليل.
اختصار- العوامل المكتوبة قبل المتغير ( - $ أ; ++ دولار أ). تُرجع قيمة المتغير قبل التغيير.
بوستفيكس- العوامل المكتوبة بعد المتغير ( $ أ--; $ أ--). إرجاع القيمة المعدلة للمتغير.
زيادة راتب- زيادة القيمة.
إنقاص- إنقاص القيمة.

++ دولار أزيادة البادئة. تزيد $ a بمقدار واحد وتُرجع قيمة $ a.
++ a دولارزيادة Postfix. لعرض قيمة $ a ثم زيادة $ a بمقدار واحد.
- $ أإنقاص البادئة. ينقص $ a بمقدار واحد ويعيد قيمة $ a.
$ أ--إنقاص Postfix. تُرجع قيمة $ a ثم تنخفض $ a بواحد.
صدى صوت "

زيادة Postfix

";
$ أ = 5 ؛
صدى "يجب أن يكون 5:". ++ a دولار. "\ ن"؛

صدى صوت "

زيادة البادئة

";
$ أ = 5 ؛
صدى "يجب أن يكون 6:". ++ دولار أ. "\ ن"؛
صدى "يجب أن يكون 6:". $ أ. "\ ن"؛

صدى صوت "

إنقاص Postfix

";
$ أ = 5 ؛
صدى "يجب أن يكون 5:". $ أ--. "\ ن"؛

صدى صوت "

إنقاص البادئة

";
$ أ = 5 ؛
صدى "يجب أن يكون 4:". - $ أ. "\ ن"؛
صدى "يجب أن يكون 4:". $ أ. "\ ن"؛
?>

عمليات تخصيص PHP
المشغل الأساسييشبه = ... للوهلة الأولى ، قد يبدو أن هذا المشغل متساوٍ. في الحقيقة، ليس هذا هو الحال. في الواقع ، يعني عامل التخصيص أن المعامل الأيسر مضبوط على قيمة التعبير الأيمن ، (أي أنه مضبوط على القيمة الناتجة). عوامل التشغيل مجتمعة- هذه عوامل تسمح لك باستخدام القيم السابقة للمتغيرات للعمليات اللاحقة (إلحاق متغير سلسلة (مع نص) أو إضافة قيم رقمية).

$ أ = (ب = 2) + 4 ؛ // النتيجة: تم ضبط $ a على 6 ، وتم ضبط $ b على 2.

$ أ = 2 ؛
$ a + = 3 ؛ // يعين $ a إلى 5 ، على غرار الكتابة: $ a = $ a + 3 ؛
$ b = "مرحبًا" ؛
$ b. = "سلام!"؛ // يعين $ b على "Hello World!" كما يفعل $ b = $ b. "هناك!"؛

هناك أيضا عمليات المقارنةو دعابة الدماغلكن سنتحدث عنها في الدروس القادمة. سأحاول ألا أخافك بكمية كبيرة من المعلومات على الفور!)

بالتأكيد لديك خزانة ملابس أو خزانة ذات أدراج في المنزل. مبدأ استخدامها بسيط: نضع الأشياء التي لا نحتاجها في الوقت الحالي ، ولكن قد نحتاجها بعد فترة.

المتغيرات تعمل بنفس الطريقة. يمكنك وضع بعض القيمة فيها وتخزينها هناك حتى تحتاجها.

تكوين المتغيرات

يمكنك وضع قيمة في المتغير على النحو التالي:

في الكود أعلاه ، أنشأنا متغير اسم $ ووضعنا قيمة إيفان فيه ، ثم أنشأنا متغير العمر $ وخصصنا القيمة 20 له.

يعني اسم "المتغير" أن قيمته يمكن أن تتغير أثناء تنفيذ البرنامج النصي:

في بعض اللغات ، يجب أولاً "التصريح" عن المتغير ثم استخدامه. لا يوجد تصريح في PHP - يتم إنشاء متغير لحظة وضع قيمة فيه.
ومع ذلك ، غالبًا ما يقول مبرمجو PHP "إعلان متغير" بدلاً من "إنشاء متغير".

أيضًا ، بدلاً من "وضع قيمة في متغير" ، غالبًا ما يقولون "إسناد قيمة".
السبب بسيط - الرمز = ، الذي بفضله نخزن قيمة في متغير ، يسمى "مشغل الإسناد". ومن هنا جاء مصطلح "مناسب".

قواعد التسمية المتغيرة

1. يبدأ اسم المتغير بالرمز $.

2. يمكن أن يكون الحرف الثاني حرفًا أو شرطة سفلية _

أسماء المتغيرات حساسة لحالة الأحرف. $ name و $ Name متغيرات مختلفة.

عرض قيمة المتغير على الشاشة

يمكنك عرض متغير باستخدام الأمر echo الذي نعرفه بالفعل:

يتيح لك الأمر echo طباعة قيم متعددة على الشاشة مرة واحدة:

لاحظ أننا مررنا قيمتين إلى الصدى ، مفصولة بفاصلات. بهذه الطريقة يمكننا نقل العديد من القيم كما نريد. المثالان التاليان سينتجان عن نفس النتيجة:

هناك أيضًا صيغة مختصرة لإخراج المتغيرات في PHP. بدلا من

قبل إصدار PHP 5.4 ، كانت صيغة الاختصار تعمل فقط عندما يتم تمكين التوجيه short_open_tag في إعدادات PHP ، والذي يسمح أيضًا باستخدام علامة الفتح المختصرة

التحقق من قيمة المتغير

لا يكون الأمر echo مناسبًا دائمًا للتحقق من القيمة الحالية للمتغير. على سبيل المثال ، إذا حاولت عرض سلسلة فارغة ، فلن يتم عرض "" أي شيء على الشاشة. وليس من الواضح ما هو السبب - متغير فارغ أو رمز لا يعمل.

لذلك ، تُستخدم الدالة var_dump () للتحقق من قيمة المتغير:

نتيجة تنفيذ النص:

سلسلة (5) سلسلة "Vasya" (0) ""

كما ترى ، لم تعرض PHP محتويات المتغير فحسب ، بل عرضت أيضًا عدد الأحرف ، وحتى نوع المتغير (سلسلة). سنلقي نظرة فاحصة على أنواع البيانات في الدروس التالية.

حذف المتغيرات

يمكنك حذف متغير موجود باستخدام وظيفة unset ():

حان الوقت الآن لممارسة القليل.

تذكر أن أي مهمة PHP يمكن أن يكون لها حلول متعددة. لذلك ، إذا كانت قراراتك تختلف عن تلك المكتوبة في هذا الموقع ، فهذا لا يعني على الإطلاق أنك فعلت شيئًا خاطئًا.

اكتب نصًا:
1. يخلق متغيرات مع العنوان والمحتوى وبعض القيم.
2. لإخراج قيمة متغير العنوان داخل علامة h1 وقيمة متغير المحتوى داخل علامة div.

عرض الحل

"، $ title،""؛ صدى صوت"

"، content $،"
"; ?>

أود أن ألفت انتباهكم إلى حقيقة أن هذا القرار ليس القرار الوحيد الصحيح. على سبيل المثال ، ستنتج الشفرة التالية نفس النتيجة:

قبل 13 عاما

مسكتك قليلا احترس من:

إذا قمت بإيقاف تشغيل RegisterGlobals وما يتصل بها ، ثم استخدم get_defined_vars () ، فقد ترى شيئًا مشابهًا لما يلي:

مجموعة مصفوفة
[GLOBALS] => صفيف
[GLOBALS] => صفيف
* العودية *
[_POST] => صفيف ()
[_GET] => صفيف ()
[_COOKIE] => صفيف ()
[_FILES] => صفيف ()
)

[_POST] => صفيف ()
[_GET] => صفيف ()
[_COOKIE] => صفيف ()
[_FILES] => صفيف ()

)
?>

لاحظ أن $ _SERVER ليس موجودًا. يبدو أن php يقوم فقط بتحميل superglobal $ _SERVER إذا تم استخدامه في مكان ما. يمكنك القيام بذلك:

مطبعة "

". htmlspecialchars (print_r (get_defined_vars ()، true))."
" ;
مطبعة "
". htmlspecialchars (print_r ($ _SERVER، true))."
" ;
?>

ثم سيظهر $ _SERVER في كلتا القائمتين. أعتقد أنه "ليس مسككًا حقًا ، لأنه لن يحدث أي شيء سيء في كلتا الحالتين ، لكنه فضول مثير للاهتمام مع ذلك.

منذ 6 سنوات

نظرًا لأن get_defined_vars () يحصل فقط على المتغيرات عند النقطة التي تستدعيها الوظيفة ، فهناك طريقة بسيطة للحصول على المتغيرات المحددة ضمن النطاق الحالي.

// أعلى نص php الخاص بك
vars = get_defined_vars () ؛

// الآن افعل الأشياء الخاصة بك
$ foo = "foo"؛
$ بار = "بار" ؛

// احصل على جميع المتغيرات المحددة في النطاق الحالي
vars = array_diff (get_defined_vars ()، $ vars) ؛

صدى صوت "

"
;
print_r ($ vars) ؛
صدى صوت "
" ;
?>

قبل 15 عاما

هذه وظيفة تقوم بإنشاء تقرير تصحيح للعرض أو البريد الإلكتروني
باستخدام get_defined_vars. عظيم للحصول على لقطة مفصلة بدون
بالاعتماد على مدخلات المستخدم.

دالة createDebugReport (طريقة $ ، $ selected_vars ، $ email = "غير محدد") (
// وظيفة لإنشاء تقرير تصحيح لعرضه أو إرساله بالبريد الإلكتروني.
// الاستخدام: createDebugReport (طريقة ، get_defined_vars () ، بريد إلكتروني) ؛
// حيث تكون الطريقة هي "المتصفح" أو "البريد الإلكتروني".

// إنشاء قائمة تجاهل للمفاتيح التي تم إرجاعها بواسطة "get_defined_vars".
// على سبيل المثال ، HTTP_POST_VARS و HTTP_GET_VARS وغيرها
// زائدة (مثل _POST ، _GET)
// قم أيضًا بتضمين المتغيرات التي تريد تجاهلها لأسباب أمنية - على سبيل المثال PHPSESSID.
$ ignorelist = مجموعة ("HTTP_POST_VARS" ، "HTTP_GET_VARS" ،
"HTTP_COOKIE_VARS" ، "HTTP_SERVER_VARS" ،
"HTTP_ENV_VARS" ، "HTTP_SESSION_VARS" ،
"_ENV" ، "PHPSESSID" ، "SESS_DBUSER" ،
"SESS_DBPASS" ، "HTTP_COOKIE") ؛

الطابع الزمني $ = التاريخ ("ش / يوم / س س: ش: ث") ؛
$ message = "إنشاء تقرير التصحيح $ timestamp \ n"؛

// احصل على آخر خطأ في SQL كمقياس جيد ، حيث $ link هو معرف المورد
// من أجل mysql_connect. التعليق أو التعديل لقاعدة البيانات أو إعداد التجريد.
رابط $ عالمي؛
$ sql_error = mysql_error (رابط $) ؛
إذا ($ sql_error) (
$ message. = "\ n رسائل MyQL: \ n". mysql_error (رابط $) ؛
}
// End MySQL

// يمكن استخدام دالة تكرارية هنا. انت وجدت الفكرة ؛-)
foreach ($ selected_vars كـ $ key => $ val) (
إذا (is_array ($ val) &&! in_array ($ key، $ ignorelist) && count ($ val)> 0) (
$ message. = "\ n $ key array (key = value): \ n"؛
foreach ($ val as $ subkey => $ subval) (
إذا (! in_array ($ subkey، $ ignorelist) &&! is_array ($ subval)) (
رسالة $. = $ فرعي. "=". $ subval. "\ ن"؛
}
elseif (! in_array ($ subkey، $ ignorelist) && is_array ($ subval)) (
foreach ($ subval مثل $ subsubkey => $ subsubval) (
إذا (! in_array ($ Subsubkey، $ ignorelist)) (
رسالة $. = $ Subsubkey. "=". $ sububval. "\ ن" ;
}
}
}
}
}
آخر (!
is_array ($ val) &&! in_array ($ key، $ ignorelist) && $ val) (
رسالة $. = "\ n متغير". مفتاح $. "=". $ val. "\ ن"؛
}
}

إذا (الطريقة $ == "المتصفح") (
echo nl2br ($ message) ؛
}
elseif ($ method == "email") (
إذا (البريد الإلكتروني $ == "غير محدد") (
البريد الإلكتروني $ = _SERVER $ ["SERVER_ADMIN"] ؛
}

$ mresult = mail ($ email، "تقرير تصحيح الأخطاء". $ _ENV ["HOSTNAME"]. ""، $ message)؛
إذا (mresult دولار == ​​1) (
صدى صوت "تم إرسال تقرير التصحيح بنجاح. \ N";
}
آخر (
صدى صوت "فشل في إرسال تقرير التصحيح. \ N";
}
}
}
?>

قبل 17 عاما

إجراء بسيط لتحويل كائن get_defined_vars إلى XML.

دالة obj2xml ($ v ، مسافة بادئة $ = "") (
while (list ($ key، $ val) = each ($ v)) (
إذا ($ key == "__attr") تابع ؛
// تحقق من __attr
إذا (is_object ($ val -> __attr)) (
بينما (قائمة ($ key2، $ val2) = كل ($ val -> __attr)) (
$ attr. = "$ key2 = \" $ val2 \ ""؛
}
}
else $ attr = ""؛
إذا (is_array ($ val) || is_object ($ val)) (
طباعة ("مسافة بادئة $< $key$attr >\ ن ")؛
obj2xml ($ val، $ indent. "")؛
طباعة ("مسافة بادئة $\ ن ")؛
}
آخر طباعة ("مسافة بادئة $< $key$attr >$ val\ ن ")؛
}
}

// مثال الكائن
$ x -> الاسم -> الأول = "جون" ؛
$ x -> الاسم -> الأخير = "سميث" ؛
$ x -> arr ["Fruit"] = "Bannana"؛
$ x -> arr ["Veg"] = "جزر" ؛
$ y -> العميل = $ x ؛
$ y -> العميل -> __attr -> id = "176C4" ؛

$ z = get_defined_vars () ،
obj2xml ($ z ["y"]) ؛
?>
سيخرج:


يوحنا
حداد


البنانة
جزرة

قبل 11 عاما

كملاحظة ، لا يُرجع get_defined_vars () مجموعة من المراجع المتغيرة (كما كنت أتمنى). على سبيل المثال:

// تحديد متغير
$ my_var = "foo"؛

// احصل على قائمة المتغيرات المحددة
$ selected_vars = get_defined_vars () ؛

// الآن حاول تغيير القيمة من خلال المصفوفة التي تم إرجاعها
$ selected_vars ["my_var"] = "شريط" ؛

صدى $ my_var، "\ n"؛

?>

سينتج "foo" (القيمة الأصلية). من الجيد أن يكون لدى get_defined_vars () حجة اختيارية لجعلها مراجع ، لكني أتخيل أنها طلب متخصص إلى حد ما. يمكنك القيام بذلك بنفسك (بشكل أقل ملاءمة) بشيء مثل:

$ selected_vars = صفيف () ؛
var_names $ = array_keys (get_defined_vars ()) ؛

foreach (var_names $ as $ var_name)
{
$ selected_vars [$ var_name] = & $ $ var_name؛
}

?>

منذ سنة 1

لقد نشرت هنا من قبل عن "هذا" في get_defined_vars.

اتضح أنها ليست موجودة دائمًا ولكن في بعض الحالات ستظهر لسبب غير مفهوم.

php -r "
اختبار فئة (
الوظيفة العامة a () (var_dump (array_keys (get_defined_vars ())) ؛ $ a = 123 ؛)
الوظيفة العامة ب () (var_dump (array_keys (get_defined_vars ())) ؛ هذا $ ؛)
}
$ t = اختبار جديد () ؛
$ t-> a () ؛
$ t-> b ()؛
"

مجموعة مصفوفة ()
مجموعة ("هذا")

هذا لا يحدث في PHP 7.2 ولكنه سيحدث في PHP 5.6.

منذ سنة 1

تشير بعض التعليقات هنا إلى أن هذه الوظيفة لن ترجع مراجع. ومع ذلك فإنه يعيد الأسماء والأسماء "مراجع".

لا أوصي بالاقتراحات هنا لتحويله إلى مراجع.

الوظيفة العامة x ($ a، $ b، $ c) (
foreach (array_keys (get_defined_vars ()) كمفتاح $)
إذا ($ key! == "this")
$ this-> y ($ ($ key)) ؛
}

الوظيفة العامة y (& $ input) (
$ input ++ ؛
}

بدلاً من $ () ، يمكنك أيضًا استخدام $$.

لقد قمت ببعض الأشياء المضحكة في وقتي لإنشاء رمز عام للغاية ولكن "لم أضطر أبدًا إلى فعل أي شيء مثل ما سبق. قد لا ينجح الأمر (ولكن ينبغي لأنه لا يختلف عن $ a [$ key]).

يمكنك أيضًا عمل $$ key ++ لكنني "لم أر أبدًا رمزًا مثل ذلك الذي لم يكن سيئًا بشكل مروع (باستخدام ديناميكي حيث لا يكون الديناميكي مفيدًا).

إذا كنت تفعل شيئًا كهذا ، فامنحه مزيدًا من التدقيق.

يستكشف هذا الدرس نطاق متغيرات PHP. يشرح الفرق بين النطاقات المحلية والعالمية ، ويوضح كيفية الوصول إلى المتغيرات العالمية داخل دالة ، وكيفية العمل مع superglobals ، وكيفية إنشاء متغيرات ثابتة.

عندما تبدأ في تعلم PHP وتبدأ في العمل مع الوظائف والكائنات ، يكون نطاق المتغيرات محيرًا بعض الشيء. لحسن الحظ ، من السهل جدًا فهم قواعد PHP في هذا الصدد (مقارنة بلغات البرمجة الأخرى).

ما هو النطاق؟

النطاق المتغير هو السياق الذي تم من خلاله تعريف المتغير وحيث يمكن الوصول إليه. PHP لها نطاقان متغيران:

  • العالمية- يمكن الوصول إلى المتغيرات في أي مكان في البرنامج النصي
  • محلي- لا يمكن الوصول إلى المتغيرات إلا داخل الوظيفة التي تم تحديدها من خلالها

النطاق المتغير ، وخاصة النطاق المحلي ، يجعل إدارة التعليمات البرمجية أسهل بكثير. إذا كانت جميع المتغيرات عامة ، فيمكن تغييرها في أي مكان في البرنامج النصي. قد يؤدي هذا إلى حدوث فوضى ونصوص كبيرة الحجم ، حيث تستخدم أجزاء مختلفة من النص في كثير من الأحيان متغيرات تحمل الاسم نفسه. من خلال تحديد نطاق السياق المحلي ، فإنك تحدد حدود الشفرة التي يمكنها الوصول إلى المتغير ، مما يجعل الشفرة أكثر قوة ووحدة وأسهل في التصحيح.

يُقال أن المتغيرات التي يتم تحديدها عالميًا هي متغيرات عالمية ، والمتغيرات ذات النطاق المحلي تسمى المحلية.

فيما يلي مثال لكيفية عمل المتغيرات العالمية والمحلية.

"؛) sayHello () ؛ صدى" القيمة \ $ globalName: "$ globalName"
"؛ صدى" القيمة \ $ localName: "$ localName"
"; ?>

مرحبا هاري! قيمة $ GlobalName: "Zoe" $ localName value: ""

في هذا البرنامج النصي ، أنشأنا متغيرين:

  • $ globalName- هذا هو عالميعامل
  • $ localName- هذا هو محليمتغير يتم إنشاؤه داخل دالة sayHello ().

بعد إنشاء المتغير والوظيفة ، يستدعي البرنامج النصي sayHello () ، والذي ينتج عنه "Hello Harry!" ... ثم يحاول البرنامج النصي تكرار قيم المتغيرين. إليك ما يحدث:

  • لأن $ globalNameتم إنشاؤه خارج الوظيفة ، وهو متاح في أي مكان في البرنامج النصي ، لذلك يتم عرض "Zoya".
  • $ localNameسيكون متاحًا فقط داخل وظيفة sayHello (). نظرًا لأن تعبير echo خارج الوظيفة ، لا تسمح PHP بالوصول إلى المتغير المحلي. بدلاً من ذلك ، تفترض PHP أن الكود سينشئ متغيرًا جديدًا باسم $ localName ، والذي سيتلقى قيمة افتراضية لسلسلة فارغة. هذا هو السبب في أن الاستدعاء الثاني لـ echo يطبع قيمة "" المتغير $ localName.

الوصول إلى المتغيرات العامة داخل دالة

للوصول إلى متغير عالمي خارج الوظيفةفقط اكتب اسمها. ولكن للوصول إلى المتغير العالمي داخل الوظيفة، يجب أولاً إعلان المتغير على أنه عام في الوظيفة باستخدام الكلمة الأساسية العامة:

الوظيفة myFunction () (global $ globalVariable ؛ // الوصول إلى المتغير العام $ globalVariable)

إذا لم تفعل ذلك ، فستفترض PHP أنك تنشئ أو تستخدم متغيرًا محليًا.

فيما يلي مثال على نص برمجي يستخدم متغيرًا شاملاً داخل دالة:

"؛ global $ globalName؛ echo" مرحبًا $ globalName!
"؛) sayHello () ؛؟>

عند التنفيذ ، سينتج النص:

مرحبا هاري! مرحبا زويا!

تستخدم الدالة sayHello () الكلمة الأساسية العامة للإعلان عن المتغير globalName $ على أنه متغير عام. ثم تستطيع الوصول إلى المتغير وعرض قيمته ("Zoya").

ما هي superglobals؟

تحتوي PHP على مجموعة خاصة من المصفوفات العامة المحددة مسبقًا والتي تحتوي على معلومات متنوعة. تسمى هذه المصفوفات superglobals ،نظرًا لأنه يمكن الوصول إليها من أي مكان في البرنامج النصي ، بما في ذلك مساحة الوظيفة الداخلية ، ولا تحتاج إلى تعريف باستخدام الكلمة الأساسية العالمية.

فيما يلي قائمة بالكرة العملاقة المتوفرة في PHP 5.3:

  • $ GLOBALS - قائمة بجميع المتغيرات العالمية في البرنامج النصي (باستثناء superglobals)
  • $ _GET - يحتوي على قائمة بجميع حقول النموذج التي يرسلها المتصفح باستخدام طلب GET
  • $ _POST - يحتوي على قائمة بجميع حقول النماذج التي يرسلها المتصفح باستخدام طلب POST
  • $ _COOKIE - يحتوي على قائمة بجميع ملفات تعريف الارتباط التي يرسلها المتصفح
  • $ _REQUEST - يحتوي على جميع مجموعات المفاتيح / القيم المضمنة في مصفوفات $ _GET و $ _POST و $ _COOKIE
  • $ _FILES - يحتوي على قائمة بجميع الملفات التي تم تحميلها بواسطة المتصفح
  • $ _SESSION - يسمح لك بتخزين واستخدام متغيرات الجلسة للمتصفح الحالي
  • $ _SERVER - يحتوي على معلومات حول الخادم ، مثل اسم ملف البرنامج النصي الذي يتم تنفيذه وعنوان IP الخاص بالمستعرض.
  • $ _ENV - يحتوي على قائمة بمتغيرات البيئة التي تم تمريرها إلى PHP ، على سبيل المثال متغيرات CGI.
على سبيل المثال ، يمكنك استخدام $ _GET للحصول على قيم المتغيرات المضمنة في سلسلة URL لطلب البرنامج النصي ، وعرضها على الصفحة:

إذا قمت بتشغيل البرنامج النصي أعلاه باستخدام سلسلة عنوان URL http://www.example.com/script.php؟yourName=Fred ، فسيتم إخراج:

مرحبًا فريد!

تحذير!في البرنامج النصي الحقيقي ، يجب ألا تستخدم نقل البيانات هذا أبدًا بسبب ضعف الأمان. يجب عليك دائمًا التحقق من بياناتك أو تصفيتها.

يعد $ GLOBALS superglobal مناسبًا جدًا للاستخدام لأنه يسمح لك بتنظيم الوصول إلى المتغيرات العالمية في وظيفة دون الحاجة إلى استخدام الكلمة الأساسية العالمية. على سبيل المثال:

"؛) sayHello () ؛ // طباعة" Hello، Zoe! "؟>

المتغيرات الثابتة: توجد في مكان قريب

عندما تقوم بإنشاء متغير محلي داخل دالة ، فإنه يوجد فقط أثناء تشغيل الوظيفة. عندما تنتهي الوظيفة ، يختفي المتغير المحلي. عندما يتم استدعاء الوظيفة مرة أخرى ، يتم إنشاء متغير محلي جديد.

هذا يعمل بشكل رائع في معظم الحالات. بهذه الطريقة تكون الوظائف قائمة بذاتها وتعمل دائمًا بنفس الطريقة في كل مرة يتم استدعاؤها.

ومع ذلك ، هناك حالات يكون من المناسب فيها إنشاء متغير محلي "يتذكر" قيمته بين استدعاءات الوظائف. يسمى هذا المتغير ثابت.

لإنشاء متغير ثابت في دالة ، يجب عليك استخدام الكلمة الأساسية الثابتة أمام اسم المتغير والتأكد من إعطائه قيمة أولية. على سبيل المثال:

الوظيفة myFunction () (static $ myVariable = 0 ؛)

دعنا نفكر في الموقف الذي يكون فيه مناسبًا لاستخدام متغير ثابت. لنفترض أنك قمت بإنشاء وظيفة ، عند استدعائها ، تنشئ عنصر واجهة مستخدم وتعرض عدد عناصر واجهة المستخدم التي تم إنشاؤها بالفعل. يمكنك محاولة كتابة رمز مثل هذا باستخدام متغير محلي:


"؛ صدى createWidget ()." لقد أنشأنا بالفعل.
"؛ صدى createWidget ()." لقد أنشأنا بالفعل.>
"; ?>

ولكن نظرًا لأن المتغير $ numWidgets يتم إنشاؤه في كل مرة يتم استدعاء الوظيفة ، فسنحصل على النتيجة التالية:

نقوم بإنشاء بعض الحاجيات ... 1 لقد أنشأنا بالفعل. 1 لقد أنشأنا بالفعل. 1 لقد أنشأنا بالفعل.

ولكن باستخدام متغير ثابت ، يمكننا تخزين القيمة من استدعاء دالة إلى التالي:

"؛ صدى createWidget ()." لقد أنشأنا بالفعل.
"؛ صدى createWidget ()." لقد أنشأنا بالفعل.
"؛ صدى createWidget ()."> أنشأنا بالفعل.
"; ?>

سينتج البرنامج النصي الآن الإخراج المتوقع:

نقوم بإنشاء بعض الحاجيات ... 1 لقد أنشأنا بالفعل. 2 لقد أنشأنا بالفعل. 3 لقد أنشأنا بالفعل.

على الرغم من أن المتغير الثابت يحتفظ بقيمته بين استدعاءات الوظائف ، إلا أنه صالح فقط في وقت تنفيذ البرنامج النصي. بمجرد انتهاء البرنامج النصي من تنفيذه ، يتم تدمير جميع المتغيرات الثابتة ، وكذلك المتغيرات المحلية والعالمية.

هذا كل شئ! تحقق من وثائق PHP في كثير من الأحيان.