אתה נמצא כאן יסודות השפה  >>  משתנים  >>  שם משתנה שהוא משתנה

שם משתנה שהוא משתנה

ב-PHP ניתן לתת למשתנה שם שאינו קבוע, אלא שמו של המשתנה יהיה משתנה אחר. המשתנה שמייצג את שמו של המשתנה חייב להיות מחרוזת עם שם תקין עבור משתנה.

<?php
  $a="hello";
/*המחרוזת "hello" מהווה שם משתנה חוקי.*/

  $$a
/*מקביל ל-${$a} ול-$hello.*/
="world";
  echo "$a ${$a}!"
/*מקביל ל-"$a $hello!".
ידפיס: hello world!
*/
;
?>

לפעמים עלולה להיווצר בעיה כאשר המשתנה של השם הוא מערך, או שהמשתנה המיוצג הוא מערך. למשל $$a[1], יכול להתפרש כך ששם המשתנה הוא $a[1], או בדרך אחרת ששם המשתנה הוא $a, והמשתנה המיוצג הוא מערך. כדי לפתור את כפל המשמעות הזו נכתוב ${$a[1]} עבור ש-$a[1] הוא שם המשתנה, ו-${$a}[1] עבור ש-$a הוא שם המשתנה.


תגובות בנושא

ואם אכתוב $$$a? 05-12-02 01:01
 תומק
#144

ועם ארבעה או חמישה סימני דולר?
זה יתפרש כ: ${${$a}}?

ועוד שאלה:
מדוע אסור לכתוב:
echo "$a $$a?" ?

תודה.

$$$ ויותר 05-12-02 02:02
 אלי חן (מנהל)
#146

זה נכון לא רק עבור שני $ אלא גם יותר. PHP עובדת כאן בצורה רקורסיבית.

כאשר רוצים להוציא לפלט משתנים עם יותר מ $ אחד, יש להשים את המשתנה בתוך סוגריים מסולסלים, למשל:
;"{echo "{$$a
או פשוט לשרשר למחרוזת.

לא הבנתי.... 01-12-03 05:02
 יניב
#664

לא הבנתי למה תשובה לאחת השאלות בנושא משתנים, אנילא זוכר מה מספר השאלה אך התשובה הייתה 120 200, אם תוכל להסביר לי למה אני אודה לכם מאוד.

200, 130 01-12-03 16:01
 אלי חן (מנהל)
#671

A מאותחל עם 100, B מאותחל עם 200, ושניהם נמצאים ברמה הגלובלית.
בפונקציה שינינו ערכים גם ל A וגם ל B. אך B הוא משתנה מקומי של הפונקציה, ואת A לקחנו כמשתנה גלובלי. לכן שינוי ערכו של A בתוך הפונקציה תשפיע על המשתנה הגלובלי A, ושינוי ערכו של B בתוך הפונקציה לא תשפיע על המשתנה הגלובלי B. על-כן B יישאר 200.
בפונקציה יש משתנה סטטי, a שערכו 10. משתנה סטטי שומר את ערכו גם אחרי שיוצאים מהפונקציה. לכן בקריאה הראשונה לפונקציה, ערכו של a הוא 10, ואז מוסיפים לו עוד 10, ובקריאה השניה לפונקציה ערכו הוא 20. היו שתי קריאות לפונקציה, לכן ל A מוסיפים 10 ואח"כ עוד 20, ויוצא שערכו 130.

לא עדיף מערכים? 02-12-03 01:01
 יולו
#676

לא כל כך הבנתי מה הקטע שלשים משתנה בתוך משתנה.. זה קצת מסורבל וקשה להבין.. אבל לפיח מה שאני הבנתי עדיף כבר להשתמש במערך ולתת לו שתי ערכים.. לא ככה?
$a = array ('hello' , 'world')
?

מערכים במקום שם משתנה שהוא משתנה 02-12-03 01:01
 אלי חן (מנהל)
#679

אממ.. לא תמיד.. לפעמים יש יתרונות קלים יותר עבור שם משתנה שהוא משתנה.. למשל קריאה לפונקציה כאשר שם הפונקציה שמורה בתוך משתנה.

לא ממש הבנתי... 03-11-03 07:01
 יונתן גורן
#1355

רגע... אז אם אני אכתוב:
$vn= "my_name"
$$vn= "is jonatan"
echo $vn
echo "<br>/n"
echo $ {$vn}

זה יחזיר
my name
is jonatan?

יש טעות 07-12-06 20:00
 ניר וקנין
#2700

יש טעות בבחן את עצמייך...
למרות שa הוא static והוא שומע על המיספר כמו שאמרת
פעם השניה שאתה נכנס לפונקציה אתה שוב מציב בו 10
לפני שאתה מצרף אותו לA ולכן התשובה הנכונה היא
120,200 ולא 130,200


לדף הקודםתחום הגדרה -הקודם
לתחילת הדףלתחילת הדף
הבא- בחן את עצמךלדף הבא