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.
| $x | isset | empty | is_null | bool |
|---|---|---|---|---|
| null | ||||
| false | ||||
| 0 | ||||
| "0" | ||||
| "" | ||||
| " " | ||||
| [] | ||||
| "a" | ||||
| 1 | ||||
| 0.0 | ||||
| "0.0" |
הדפוס שכדאי לזכור:
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 קצרה יותר ומעט מהירה יותר.