Menu

isset() ב-PHP: בדיקה אם משתנה או מפתח מערך מוגדרים

isset($var) מחזירה true כשמשתנה קיים ואינו null, ו-false אחרת, בלי שום אזהרה. היא בודקת גם מפתחות מערך ומאפייני אובייקטים: isset($user['email']). למדו isset עם כמה משתנים, מפתחות מקוננים, isset מול empty, isset מול array_key_exists ובדיקת שליחת טפסים.

בדף הזה יש עורכים שאפשר להריץ - לערוך, להריץ ולראות את הפלט מיד.

isset($var) מחזירה true אם המשתנה קיים והערך שלו אינו null. היא מחזירה false למשתנה לא מוגדר, למשתנה שעבר unset או למשתנה שמחזיק null, והיא אף פעם לא מדפיסה אזהרה.

isset() בודקת רק אם משהו נמצא שם. ערך שמוגדר אבל ריק, כמו 0, "" או [], עדיין מחזיר true. אם אתם רוצים "מוגדר ולא ריק", השתמשו ב-empty (בשלילה).

בדיקה אם מפתח מערך קיים עם isset

כאן משתמשים ב-isset() הכי הרבה. קריאה של מפתח שלא קיים מדפיסה Warning: Undefined array key בהתקנת PHP רגילה; בדיקה קודם עם isset() לא מדפיסה כלום. זה עובד גם למפתחות מקוננים, ועוצר בשקט ברמה החסרה הראשונה.

כשצריך רק את הערך או ברירת מחדל, $user["website"] ?? "none" עושה את אותה בדיקה בצעד אחד. ראו את אופרטור ה-null coalescing.

isset עם כמה משתנים

העבירו כמה ארגומנטים ו-isset() תחזיר true רק אם כולם מוגדרים ואינם null. זו דרך קצרה לבדוק שכל שדות החובה הגיעו.

isset על מחרוזות ואובייקטים

על מחרוזת, isset($str[5]) בודקת אם יש תו במיקום 5, וזו בדיקת אורך מהירה. על אובייקט, היא בודקת מאפיין; במחלקה עם נתונים פרטיים, isset() קוראת למתודה __isset() אם המחלקה מגדירה אותה.

isset מול empty מול is_null

בחרו ערך של $x בטבלה כדי להשוות את שלוש הבדיקות ואת ההמרה הפשוטה (bool). כל תא חושב על ידי PHP 8.3.

isset, empty ו-is_null לכל ערך של $x
Point at or tap a cell to read it as PHP.
$xissetemptyis_nullbool
null
false
0
"0"
""
" "
[]
"a"
1
0.0
"0.0"
Every cell computed by PHP 8.3.19.

הדפוס שכדאי לזכור:

  • isset() היא false רק עבור null ועבור דברים שלא קיימים.
  • empty() היא true עבורם וגם עבור כל ערך שקרי: false, 0, 0.0, "", "0", [].
  • is_null() נותנת את ההפך של isset() למשתנים קיימים, אבל מזהירה כשהמשתנה לא מוגדר. השתמשו במקומה ב-isset() או ב-=== null.

בדיקה אם טופס נשלח

isset() היא הדרך הקלאסית לבדוק אם שדה טופס הגיע. הריצו את הבלוק, הקלידו שם ולחצו על Send: אותו סקריפט ירוץ שוב כש-$_POST מלא.

שדה טקסט ריק עדיין נשלח, בתור "", ולכן isset($_POST["name"]) הוא true אחרי כל שליחה. תיבת סימון שלא סומנה לא נשלחת בכלל, וזה הופך את isset() לבדיקה המדויקת לתיבות סימון. כדי לדרוש ערך לא ריק, בדקו את המחרוזת אחרי trim כמו שהבלוק עושה. עמוד הטפסים בונה טופס מלא עם אימות.

isset מול array_key_exists

השתיים מסכימות על הכול חוץ ממפתח שהערך שלו null. isset() מתייחסת אליו כחסר, array_key_exists() לא.

אם "מוגדר כ-null" אומר משהו שונה מ"לא הוגדר" בנתונים שלכם, השתמשו ב-array_key_exists(). אחרת isset() קצרה יותר, והיא מבנה שפה ולא קריאה לפונקציה, ולכן גם מעט מהירה יותר.

טעות נפוצה: isset על ביטוי

isset() מקבלת רק משתנים, איברי מערך ומאפיינים. העברה של תוצאת פונקציה או של קבוע היא שגיאת הידור:

<?php
if (isset(trim($input))) {}
PHP Fatal error:  Cannot use isset() on the result of an expression (you can use "null !== expression" instead) in /home/index.php on line 2

שמרו קודם את התוצאה במשתנה, או בדקו את הערך עצמו: null !== $expr כפי שההודעה מציעה, או trim($input) !== "" למחרוזת.

שאלות נפוצות

מה isset() עושה ב-PHP?

isset($x) מחזירה true אם $x קיים ואינו null, ו-false אחרת. היא אף פעם לא מעלה אזהרה על משתנה או מפתח מערך לא מוגדרים, ולכן היא בטוחה על נתוני בקשה כמו isset($_POST['email']).

מה ההבדל בין isset() ל-empty() ב-PHP?

isset() שואלת "האם זה קיים ואינו null"; empty() שואלת "האם זה חסר או שקרי". עבור 0, "", "0" ו-[], isset() מחזירה true וגם empty() מחזירה true. עבור null או מפתח חסר, isset() היא false ו-empty() היא true. !empty($x) זהה ל-isset($x) יחד עם ערך אמיתי של $x.

האם isset() יכולה לבדוק כמה משתנים?

כן: isset($a, $b, $c) מחזירה true רק אם כל אחד מהם מוגדר ואינו null. היא עוצרת בראשון שאינו מוגדר.

להשתמש ב-isset() או ב-array_key_exists()?

הן שונות רק כשהמפתח קיים עם הערך null: isset($arr['k']) מחזירה false, array_key_exists('k', $arr) מחזירה true. השתמשו ב-array_key_exists כש-null הוא ערך שמור בעל משמעות; אחרת isset קצרה יותר ומעט מהירה יותר.

איור של שפות התכנות ב-Coddy

ללמוד תכנות עם Coddy

להתחיל