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

כללי

משתנים ב-PHP מוגדרים עם סימן דולר - $variable_name, והם חייבים להתחיל באות או קו תחתון ויכולים להכיל בתוכם אותיות, ספרות וקוים תחתוניים. שמות המשתנים הם case-sensitive, כלומר יש הבחנה בין אותיות גדולות וקטנות (למשל: $Var שונה מ-$var).

ב-PHP3 המשתנים מיוחסים תמיד לפי ערכם (assigned by value), זאת אומרת שכאשר שמים משתנה אחד בתוך משתנה אחר, הערך מועתק מאחד לשני, ושינוי של משתנה אחד אינו משפיע על המשתנה האחר. ב-PHP4 יש גם ייחוס משתנים לפי מצביע (assigned by reference), וזאת עושים ע"י כתיבת & לפני המשתנה. אם שמים משתנה אחד במשתנה אחר ע"י ייחוס לפי מצביע, שינוי של אחד המשתנים ישפיע גם על האחר.

<?php
  $a=5;
  echo "\$a is $a.<BR><BR>\n";
  
  /* in PHP3 (assigned by value) */
  echo "Assignment by value:<BR>\n";
  $b=$a;
/*השמה של משתנה $a בתוך משתנה $b.
ייחוס לפי ערך (assigned by value).
$a=5 ; $b=5
*/

  $b=1;
/*שינוי המשתנה $b לערך 1.
השינוי לא משפיע על ערכו של המשתנה $a.
$a=5 ; $b=1
*/

  echo "\$a is $a, \$b is $b.<BR><BR>\n";
  
  /* in PHP4 (assigned by reference) */
  echo "Assignment by reference:<BR>\n";
  $c=&$a;
/*השמה של משתנה $a בתוך משתנה $c.
ייחוס לפי מצביע (assigned by reference).
$a=$c=5
*/

  $c=2;
/*שינוי המשתנה $c לערך 2.
השינוי ישפיע על ערכו של המשתנה $a.
$a=$c=2
*/

  echo "\$a is $a, \$c is $c.<BR>\n";
?>


תגובות בנושא

הסבר מאוד יפה ! 06-12-02 23:00
 עוז
#281

אני לפחות הבנתי.

הסבר 07-12-02 08:01
 drd
#307

אני רוצה להבין מה קורה במצב כזה:

$a=2
$b=&$a + 5
$a=3
echo $b
//האם התוצאה היא : 7 או 8
???
וגם ה - \משתנה אומר שיש אחרי זה משתנה ....נכון?

זו טעות לעשות ככה 07-12-02 09:00
 אלי חן (מנהל)
#311

הקוד שכתבת הוא לא נכון! כאשר משתמשים באופרטור & (ייחוס), אין להשתמש באופרטורים אריתמטיים (+ - * / %).
לכן השורה הזו לא נכונה:
$b=&$a+5

שאלה 02-12-03 01:01
 ירדן גור
#699

כרושמים את השורה $c=&$a
אז זה עושה שהערך של a יהפוך לערך של c
זה נכון?

$c=&$a 02-12-03 01:02
 אלי חן (מנהל)
#706

כן.. כעת $c ו $a יצביעו לאותו מקום בזיכרון ושינוי אחד מהם ישפיע גם על השני באותה המידה.

שאלה 02-11-03 00:02
 עומר
#1277

לא הבנתי למה הקוד הזה:
<?
$var1="var1";
$var2="var2";
$variable=&$var1;
$var1=$var2;
$var2=$var1;
echo $$variable;
?>

מחזיר את הפלט var2.
כאילו הייחוס ע"פ מצביע פועל בשתי הכיוונים?

תשובה 03-11-03 07:01
 יונתן גורן
#1353

הייחוס ע"פ מצביע פועל על פועל בשתי הכיוונים, ככה לפחות הבנתי...

כל הכבוד 09-12-04 03:01
 רועי חסוי
#1793

באמת הסבר טוב

יפה! 09-12-04 03:02
 מושה יצחקי
#1794

מאוד מובן .:)
מקווה שככה אני יבין בהמשך...

כן 07-12-06 20:00
 ניר וקנין
#2698

היחוס לפי מצביע עובד לשני הכיוונים ואני יסביר לך למה...
מה זה משתנה בעצם... מקום בזיכרון והשם שלו זה הפניה
לאותו מקום בזיכרון... מה שאתה עושה כשאתה מציב מצביע לתוך משתנה
אתה אומר לאותו משתנה להצביע לאותו מקום של מה שהכנסת
כלומר ששניהם מצביעים לאותו מקום בזיכרון
תעשה שיני בכל אחד מהם זה יעשה שינוי באותו מקום
בזיכרון ולכן ישפיע על שתיהם בצורה שווה...
תחשוב על שתי אנשים מצביעים על נקודה ברציפה עליה יש קופסה...
אם אני יזיז ת'קופסה וישים שם משהוא אחר... כרגע שניהם מצביעים על משהוא האחר נכון?
אותו עיקרון פועל כאן


לדף הקודםמשתנים -הקודם
לתחילת הדףלתחילת הדף
הבא- משתנים מוגדרים מראשלדף הבא