הוסטס - פורום אחסון האתרים הגדול בישראל

הוסטס - פורום אחסון האתרים הגדול בישראל (https://hosts.co.il/forums/index.php)
-   פורום תיכנות (https://hosts.co.il/forums/forumdisplay.php?f=14)
-   -   כמה שאלות.. (https://hosts.co.il/forums/showthread.php?t=83924)

SarafC 21-07-10 22:42

כמה שאלות..
 
שלום.

יש לי כמה שאלות:

1. רציתי לקבל הסבר פשוט - by-referenct - לא הבנתי מה זה ממש אומר.. בגדול, הבנתי (ויכול להיות שטעיתי) שזה כאילו שולח הפניה במקום ערך חדש.
כלומר אם אני עושה:

PHP קוד:

$a 10;
$b 20;
$a = &$b;
$b 30;
echo 
$a

אז יודפס 30..

זה נכון?

כמו כן, מה זה אומר בפונקציות? שאם אני שולח הפניה ומשנה את הפרמטר המתקבל, זה משתנה גם בתוכנית?

-----------------------

2. הביטוי:

PHP קוד:

function example($d 3$required)
{
}
 
example($required); 

לא תקין מכיוון שהתוכנית לא תדע לאן אני שולח את הפרמטר. אם בכל זאת אני רוצה לשלוח רק לפרמטר השני $required ולהשאיר את ברירת המחדל של הראשון, איך אני עושה את זה / עוקף את הבעיה?

~The_Sultan~ 21-07-10 23:13

1. הסימן & מחבר בין הערך הקיים לערך החדש (במקרה שהבאת בין המשתנה $a ל-$b).
2. תנסה לשים פסיק, אולי זה יעבוד:
example(,$required);
או שבפונקציה עצמה פשוט תהפוך את הסדר:
function example($required, $d = 3)

Hagaibl 22-07-10 10:00

ציטוט:

נכתב במקור על ידי ~The_Sultan~ (פרסם 772282)
1. הסימן & מחבר בין הערך הקיים לערך החדש (במקרה שהבאת בין המשתנה $a ל-$b).
2. תנסה לשים פסיק, אולי זה יעבוד:
example(,$required);
או שבפונקציה עצמה פשוט תהפוך את הסדר:
function example($required, $d = 3)

|winky|

רק מחזק את אחד, זה אומר שכל שינוי של ערך שמתקבל למשתנה b גם a מושפע ומקבל את הערך של b כלומר שתי המשתנים זהים רק עם שמות שונים.

Shay Ben Moshe 22-07-10 11:27

ב1 צדקת. הרעיון הוא ששני המשתנים הם שמות שונים לאותו תא בזכרון. אם אתה עושה לדוגמה פונקציה שמקבל מערך ומחליפה את כל התאים שלו ב1 ולא מחזירה כלום המערך שתשלח ישאר אותו דבר. אם תשלח אותו בref אז הוא יוחלף בפועל כיוון שזה אותו מערך ולא העתק שלו.
ב2 הדוגמה לפונקציה שנתת לא חכמה. אם הפרמטר הראשון הוא אופציונאלי והשני חובה, זה הופך למעשה גם את הראשון לחובה.

liorclub 22-07-10 18:59

call by value - הפונקציה מקבלת העתק של המשתנה. כלומר, כל עיבוד של המשתנה הנוכחי לא ישפיע על המשתנה המקורי שנשלח.
call by address/reference - שולח בעצם את המכוון/מצביע לאותו תא בזכרון. משמע, כל עיבוד על אותו משתנה ישפיע על המשתנה המקורי.

SarafC 22-07-10 19:12

בקשר לראשון הבנתי =]

בקשר לשני - אני שואל אם ברגע שאני כותב את זה ככה, אין דרך לשלוח רק את הפרמטר השני, בעזרת משהו כמו

PHP קוד:

functionName(,$required

או משהו כזה...

Hagaibl 22-07-10 20:05

ציטוט:

נכתב במקור על ידי SarafC (פרסם 772383)
בקשר לראשון הבנתי =]

בקשר לשני - אני שואל אם ברגע שאני כותב את זה ככה, אין דרך לשלוח רק את הפרמטר השני, בעזרת משהו כמו

PHP קוד:

functionName(,$required

או משהו כזה...

תחליף פשוט את הסדר.

~The_Sultan~ 22-07-10 21:26

גם אם כתבת בפונקציה $a=3 ושלחת ערך למקום הזה, אז זה ישכתב לך את הערך של a.
לכן אתה צריך פשוט להחליף את הסדר, כמו שכבר אמרתי לך פה וגם אחרים..

AlmogBaku 23-07-10 11:19

בואו נעשה קצת סדר..
---

reference(רפרנס או בעברית מצביע או בקיצור לפעמים ref) - הוא למעשה המצביע(מעיין כתובת) של המשתנה.
למעשה כשאני שולח פרמטר כלשהוא בתצורת רפרנס אני מאפשר גישה מלאה אל המשתנה.

כלומר- בשליחת משתנה רגילה אני רק מקבל את ערך המשתנה. בשליחת משתנה בתצורת רפרנס כל פעולה שאבצע על הרפרנס תושפע.


דוגמאות:

בדוגמה זו- הצבתי את a כערך של b
PHP קוד:

$a=$b

בדוגמה זו- הצבתי את a כמצביע של b. וכעת a היא כמו "שם נרדף" ל b
PHP קוד:

$a=$b


למעשה כאשר אני שולח למתודה/פונקציה ארגומנט עם מצביע(רפרנס), כלומר הפעולות שאבצע עליו ישפיעו על תכולת המשתנה, ולא רק הערך.

~The_Sultan~ 23-07-10 12:08

שלחת לכתוב & בקוד השני


כל הזמנים הם GMT +2. הזמן כעת הוא 17:45.

מופעל באמצעות VBulletin גרסה 3.8.6
כל הזכויות שמורות ©
כל הזכויות שמורות לסולל יבוא ורשתות (1997) בע"מ