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

תחום הגדרה

תחום ההגדרה של משתנה הוא טווח ההכרה של משתנה בתוך הבלוק בו הוא נמצא ובתת-בלוקים שלו. כמו טווח הגדרה של משתנים כן גם טווח הכרה של פונקציות (וקבצים שנכללו). ב-PHP, בשונה מ-C, משתנים גלובליים לא מוכרים בתוך הפונקציות כדי לא לשנות בטעות ערכים גלובליים. כדי להשתמש במשתנה גלובלי חיצוני בתוך פונקציה, יש להגדיר את המשתנה כמשתנה גלובלי שבא מחוץ לפונקציה בעזרת global, שמציין רשימה של משתנים שיהיו לקוחים מן המשתנים הגלובליים.

<?php
  $a=1;
  $b=2;
/*משתנים גלובליים.*/

  
  function func()
  {
     global $b;
/*מצהירים כי המשתנה $b יהיה
לקוח מן המשתנים הגלובליים.
*/

     $a=11;
/*המשתנה $a לא הוגדר בפונקציה כמשתנה גלובלי,
לכן הוא משתנה מקומי שטווח הכרתו היא בתוך הפונקציה בלבד,
ושינוי ערכו בפונקציה לא ישפיע על ערכו של המשתנה הגלובלי $a.
*/

     $b=22;
/*המשתנה $b הוגדר בפונקציה כמשתנה גלובלי,
לכן שינוי ערכו בפונקציה ישפיע על ערכו של המשתנה הגלובלי $b.
*/

  }
  
  func();
  echo "\$a=$a";
  echo "<BR>\$b=$b";
?>

דרך נוספת לגשת למשתנים גלובליים הוא בעזרת המערך הגלובלי $GLOBALS (המערכים הגלובליים המוגדרים מראש שהוזכרו בדף הקודם נגישים בכל מקום שהוא, גם בתוך הפונקציות). באמצעות $GLOBALS, במקום להגדיר את המשתנים הגלובליים בפונקציה, נוכל לרשום $GLOBALS['var_name'] כדי לגשת למשתנה הגלובלי $var_name.

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

<?php
  function Increase()
  {
     static $a=0;
/*המשתנה $a מוגדר בפונקציה כמשתנה סטטי.
בקריאה הראשונה לפונקציה ערכו יאותחל עם הערך 0,
ובכל קריאה נוספת ערכו יישמר מהפעם האחרונה שהפונקציה נקראה.
*/

     echo $a;
     $a++;
/*מקדם את $a ב-1.*/

  }
  
  Increase();
/*קריאה ראשונה לפונקציה.
ידפיס 0.
*/

  echo "<BR>\n";
  Increase();
/*קריאה שניה לפונקציה.
ידפיס 1.
*/

?>


תגובות בנושא

PHP 09-12-02 00:00
 יאיר פיסו
#389

nice shit
אני יודע ASP מעולה וזה הרבה יותר קל
ונוח פה הכל מסורבל בPHP

לא כל כך הבנתי תהסבר הראשון. 09-12-02 02:02
 פיני
#400

הדבר הייד שהבנתי זה ש
שנתתה שני משתנים
a
b
ואת בי הגדרת כגלובלי.
מזה:
function func()
???

תגובה: function func() 09-12-02 02:02
 אלי חן (מנהל)
#401

השורה הזו בעצם מגדירה פונקציה.. תראה את החלק של "פונקציות" בהמשך.

תחום גדרה של משתנים ותבניות 31-10-02 18:02
 קידן אילני
#495

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

PHP 08-12-03 03:01
 [ללא שם]
#1030

לASP יש מגבלות רבות, PHP היא שפה עם הרבה יותר אפשריות מASP, אתה חושב שPHP מסורבל בגלל שכנראה אתה יותר רגיל לASP אבל מי שרגיל PHP קל לו יותר לעבוד עם השפה

בקשר לדוגמא השנייה 02-11-03 08:01
 זיו
#1304

קודם כל ממש אבל ממש כל הכבוד על האתר !!!
אני מתכנת ב ASP ואני חייב להגיד שהאתר הזה ממש עושה לי חיים קלים במעבר ל PHP, שוב - כל הכבוד !

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

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

הפקודה static מגדירה את המשתנה רק בפעם הראשונה שקוראים לפונקציה, ואז מפסיקה להזין לו ערכים.

ואני גם חושב שהאתר מוצלח מאוד, אבל למי שאין רקע בתכנות לא יכול להבין ממש את הדוגמאות וההסברים...

שחכת גם 04-12-04 05:02
 טל חדד
#1528

שהיא שומרת את הערך האחרון כשיוצאים מהפונקציה ומחזירה אותו בפעם הבאה שקוראים לפונקציה

פירגון! 01-11-05 23:02
 רונן יריב
#2639

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

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

ולסיום מתוק - שוב ,תודה ו- כ ל ה כ ב ו ד !!!

איך... 07-12-06 20:00
 ניר וקנין
#2699

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


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