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

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

Imri 19-07-08 11:54

פונקציה לא מובנת לי
 
שלום.

עברתי קצת על הקוד של מערכת IPB והגעתי לפונקציה כזאת:
קוד:

    function my_setcookie( $name, $value="", $sticky=1, $expires_x_days=0 )
    {
                //-----------------------------------------
                // Check
                //-----------------------------------------
               
        if ( $this->no_print_header )
        {
                return;
        }
       
                //-----------------------------------------
                // Set vars
                //-----------------------------------------

        if ( $sticky == 1 )
        {
                $expires = time() + ( 60*60*24*365 );
        }
                else if ( $expires_x_days )
                {
                        $expires = time() + ( $expires_x_days * 86400 );
                }
                else
                {
                        $expires = FALSE;
                }
...

שהקריאה לה מתבצעת כך:
קוד:

$this->my_setcookie( 'ipb_stronghold', '-1' );
$this->my_setcookie('forum_read', $fread);
$this->my_setcookie( 'ipb_stronghold', $stronghold, 1 );

כעת, אני לא מבין כמה דברים.
1 - עם כמה משתנים צריך לקרוא לפונקציה?? (בכל אחת הדוגמאות יש מספר שונה של משתנים, פעם אחת 2, פעם שניה 2, פעם שלישית 3 ...
2 - איך העוגיות מקבלות ערך שהוא לא "" אם כתוב:
$name, $value="", $sticky=1, $expires_x_days=0
3 - מדוע יש if ( $sticky == 1 ) אם נאמר: $name, $value="", $sticky=1, $expires_x_days=0 ?

השאלה הכללית שלי היא איך הפונקציה מקבלת ערכים שונים ממה שמוגדרים לה כאן:
function my_setcookie( $name, $value="", $sticky=1, $expires_x_days=0
ואיך זה שכל פעם היא מקבלת מספר שונה של ערכים והיא יודעת "למיין" אותם, כל ערך לאיזה משתנה יילך? (האומנם?)

תודה.

mlnn 19-07-08 12:07

אם אתה לא מספק פרטמטרים אז נכנסים ערכי הברירת מחדל, שבמקרה הזה:
$value=""
$sticky=1
$expires_x_days=0

לכן מספיק לקרוא לפונקציה רק עם פרמטר אחד ($name). ואם אתה לא רוצה להשתמש בערכי ברירת המחדל אתה יכול לשכתב אותם למה שבא לך. הכנסת פרמטרים היא משמאל לימין, אז אם תרצה לשנות את $sticky תצטרך לתת גם ערך ל $value.

Imri 19-07-08 12:22

הבנתי, אז אתה אומר שה- "-1" זה בעצם ה- VALUE?
אם הייתי כותב ככה:
קוד:

$this->my_setcookie('imri', '', '', 5)
$sticky היה '' או ברירת המחדל, 1?


שאלה נוספת,
כאן:
קוד:

                //-----------------------------------------
                // Time options
                //-----------------------------------------
               
                $this->time_options = array( 'JOINED' => $this->vars['clock_joined'],
                                                                        'SHORT'  => $this->vars['clock_short'],
                                                                        'LONG'  => $this->vars['clock_long'],
                                                                        'TINY'  => isset($this->vars['clock_tiny']) ? $this->vars['clock_tiny'] : 'j M Y - G:i',
                                                                        'DATE'  => isset($this->vars['clock_date']) ? $this->vars['clock_date'] : 'j M Y',
                                                                  );

מה זה הסימן שאלה הזה? מה בכלל הולך בקטע הזה, זה כמו IF או משהו כזה?

Inet 19-07-08 12:39

ציטוט:

נכתב במקור על ידי Imri (פרסם 651639)
הבנתי, אז אתה אומר שה- "-1" זה בעצם ה- VALUE?
אם הייתי כותב ככה:
קוד:

$this->my_setcookie('imri', '', '', 5)
$sticky היה '' או ברירת המחדל, 1?


שאלה נוספת,
כאן:
קוד:

                //-----------------------------------------
                // Time options
                //-----------------------------------------
               
                $this->time_options = array( 'JOINED' => $this->vars['clock_joined'],
                                                                        'SHORT'  => $this->vars['clock_short'],
                                                                        'LONG'  => $this->vars['clock_long'],
                                                                        'TINY'  => isset($this->vars['clock_tiny']) ? $this->vars['clock_tiny'] : 'j M Y - G:i',
                                                                        'DATE'  => isset($this->vars['clock_date']) ? $this->vars['clock_date'] : 'j M Y',
                                                                  );

מה זה הסימן שאלה הזה? מה בכלל הולך בקטע הזה, זה כמו IF או משהו כזה?

תנאי IF מקוצר, במידה והתנאי אמיתי אז האפשרות הראשונה (לפני ה : ) תתבצע, במידה והתנאי לא אמיתי יתבצע השורה אחרי ה :

Davieh 19-07-08 12:40

זה הצבת תנאי,
הסימן שאלה זה אם, והנקודותיים זה אז ..
במקום לעשות IF, אז הם עושים את התנאי בקביעת האובייקט


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

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