פעולת ההשמה נעשית ע"י האופרטור = (שווה). הערך המוחזר מההשמה הוא ערך ההשמה בעצמו, למשל "$a=4" מחזיר ערך 4. בנוסף להשמה הרגילה יש גם השמה משולבת, שילוב של אופרטור עם סימן ההשמה, למשל: "$a.="bye"", ששקול ל-"$a=$a."bye"".
ההשמה הרגילה היא השמה לפי ערך (assignment by value), אך ב-PHP4 יש גם השמה לפי מצביע (assignment by reference), שנעשה בצורה "$a=&$b". השמה לפי ערך מעתיקה ערך ממשתנה אחד לשני ויוצרת בלוק נפרד בזיכרון, והשמה לפי מצביע יוצרת משתנה נוסף שמצביע לאותו הבלוק בזיכרון. על-כן, בהשמה לפי ערך שינוי אחד המשתנים לא ישפיע על האחר, ובהשמה לפי מצביע שינוי של אחד המשתנים ישפיע על שתיהם.
<?php echo 'The value of the assignment ($a=3) is: '.($a=3)
/*
הערך של ביטוי ההשמה הזה הוא ערך ההשמה עצמו, כלומר הערך 3.
*/
."<BR>\n"; $b=$a;
/*
השמה לפי ערך (assigned by value). המשתנים $a ו-$b מצביעים ל-2 בלוקים נפרדים בזיכרון, שמכילים את הערך 3.
*/
$c=&$a;
/*
השמה לפי מצביע (assigned by reference). המשתנים $a ו-$c מצביעים לאותו הבלוק בזיכרון, שמכיל את הערך 3.
*/
$b=5;
/*
בבלוק הזיכרון שאליו מצביע $b נשמר הערך 5. בלוק הזיכרון של המשתנים $a ו-$c לא השתנה כתוצאה מכך, ולכן ערכם של $a ו-$c לא משתנה.
*/
echo "\$a is $a , \$b is $b , \$c is $c<BR>\n"; $a=7;
/*
בבלוק הזיכרון שאליו מצביע $a נשמר הערך 7. אבל המשתנה $c מצביע לאותו הבלוק, ולכן ערכו של $c משתנה כתוצאה מכך ל-7.
לא הבנתי את ההשמה המשולבת... אז אם אני כותב:
$a.="bye"
אז $a שווה ל-"byebye" כלומר האופרטור מגדיר את המשתנה ואז מוסיף לו את הערך שהוא קבע?
השמה משולבת
01-12-04 12:02 אסף
#1384
גם אני תלמיד חדש בPHP. אבל נראה לי שזה לא שונה i+=1 שיש ב C או JAVA. פשוט תחליף את:
$a.="byb"
ב:
$a = $a."bye"
ומכיוון ש $a
היה ריק לפני עכשיו אתה צובר בתוכו "bye"
תלוי בערך שיש בA
02-12-04 07:02 עדי
#1425
אם הערך שהיה ב$a הוא bye אז כן, - השרשור ייתן "byebye"
ואשם הערך הקודם היה "hello" אז
$a.="bye"
יהיה שווה ל hellobye
זו דעתי...
לא הבנתי
08-12-04 04:02 איתן בןאב
#1729
מה מיוחד ב $a.="bye"
מה עושה $a=a."bye" ?
ככה
07-12-06 20:00 ניר וקנין
#2702
בהרבה שפות יש אפשרות לעשות string + string
לדוגמא $a="A"+"B" כדי לקבל $a="AB"
בPHP זה גם אפשרי פשוט במקום לשים + שמים .
כלומר ש$a="A"."B" יוצא $a="AB"